我有2個應用程序,一個用C編寫,另一個用Java編寫,假設在同一臺機器上運行。在它們之間實現IPC的最佳方式是什麼?在Java和C應用程序之間的IPC
最好的意思可移植性,最少的用戶認知度(防火牆彈出窗口...)等
我有2個應用程序,一個用C編寫,另一個用Java編寫,假設在同一臺機器上運行。在它們之間實現IPC的最佳方式是什麼?在Java和C應用程序之間的IPC
最好的意思可移植性,最少的用戶認知度(防火牆彈出窗口...)等
我會使用Sockets over loop開始。這使您可以發送文本或二進制數據,並在一個進程開始或死亡時乾淨地處理。延遲時間大約爲20-50微秒,具體取決於您對數據所做的操作以及發送的數量。
套接字是獨立於平臺的,可以在純Java中使用。有數百萬個可用於Java的示例和教程。
套接字也是我的優先選擇,但我擔心用戶將面臨的防火牆彈出窗口。當套接字是「本地」時會發生嗎? – user653952 2011-05-05 16:43:55
我相信這是防火牆特定的。我有Windows Vista/7,並沒有爲此彈出窗口。 (也許這是第一次,但我早已忘記;) – 2011-05-05 16:45:31
我發現,最簡單的方法是給exec從Java本機程序,然後通過過程輸入和溝通輸出流。這隻適用於ASCII通信,但在大多數情況下都可以。這種方法適用於各種平臺。如果應用程序獨立於彼此啓動,則文件或套接字都是跨平臺的方法,並且如果需要可以使用二進制數據。
總是存在JNI或JNA,但它們通常最適合java和本機代碼之間的緊湊型couplin。
您可以使用命名的插座或網絡插座爲此..
我從來沒有嘗試過,但Java確實有支持內存映射文件http://docs.oracle.com/javase/1.4.2/docs/api/java/nio/MappedByteBuffer.html 這將使你到C之間共享對象的能力和Java應用程序。同步訪問可能具有挑戰性,因爲我不認爲Java可以直接訪問OS級別的IPC同步基元。
很多是依賴於操作系統的 - 例如:Linux和Solaris門。 – 2011-05-05 16:15:46
您可以使用JNI或JNA來實現一個將調用C函數來使用IPC的庫。有跨平臺的C庫提供IPC。如果你可以使用C++,那麼你可以使用Boost庫,它提供了IPC。 – Squall 2011-05-05 16:33:33