2010-04-16 77 views
3

我有兩個單獨的程序,一個在Java中,另一個在C++中,都在Windows上運行。 我們需要做兩者之間的雙向進程間通信。在Windows上通過管道進行Java/C++通信

到目前爲止,我們正在使用這種寫入文本文件並在另一側讀取它們的尷尬解決方案,生產者在完成寫入時會生成一個.lock文件,並且在完成讀取時消費者會將其刪除......就像我說的,尷尬。

如果我們在* nix上,我們將在C++和Java端使用一個使用popen()和RadomAccessFile的管道。它似乎運作良好。

我們可以在Windows上做什麼?我們可以使用命名管道嗎?

謝謝。

回答

2

看看谷歌的協議緩衝區:http://code.google.com/apis/protocolbuffers/docs/overview.html

這提供了Java和C++之間的序列化機制。

然後Google爲套接字的C++流實現並通過TCP在Java和C++之間發送消息。

+0

我們已經使用我們自己的協議完成了這項工作....謝謝。 – Warlax 2010-04-22 02:12:48

2

如果您正在使用Java和C++的混合,我會推薦用於IPC的套接字。套接字看起來像是寫入/鎖定共享文件的更強大的解決方案:)。

不過,我會指出你this SO發佈...好像你可以在Java端.NET方面和RandomAccessFile中使用命名管道:http://v01ver-howto.blogspot.com/2010/04/howto-use-named-pipes-to-communicate.html

把那一槍...它看起來很有希望

+0

寶來,謝謝。我看過那篇文章和相應的博客文章。我甚至在一個同事用C++實現了命名管道的同時實現了Java端。問題是Java抱怨文件沒有找到異常,因爲「\\\\。\\ pipe \\ testpipe」不存在。 現在,在Mac上運行時,\\。\ pipe \ testpipe僅創建一個文件並且運行順利。但不幸的是,我們沒有在* nix上部署。 – Warlax 2010-04-16 23:09:28