2013-04-05 91 views
3

我有一個用C#編寫的程序,它接收來自第三方服務器的數據並將其處理爲一系列整數(它們正在快速流動)。該程序是用C#編寫的,因爲第三方提供了處理數據的類,但只在C#中提供。我想在Java程序中使用這些整數並以流方式使用它們(所以一旦它們由C#程序進行流式處理和處理,我想在Java程序中使用整數)。第二個程序是用Java編寫的,因爲另一個第三方只用Java提供它們的類(這是必需的)。所以我的猜測適合做什麼屬─從用C#編寫的程序獲取數據到Java程序

  1. 查找運行C#類在Java程序,然後包括直接處理輸入數據到我的Java程序[這似乎並沒有太多的C#類有希望 - 我似乎無法得到jni4net,這是在其他職位的建議,工作]

  • C#編寫另一個程序保存到特定的內存位置正在處理的整數。編譯程序。然後在Java源代碼中運行可執行文件,並在Java代碼中編寫一些回調函數,當特定內存位置的整數發生變化時可以讀取這些回調函數,並記錄這些新數字是什麼[不確定如何開始! ]
  • 有沒有人有什麼建議可能是最痛苦的方法?

    +1

    看看這個:http://stackoverflow.com/questions/14824491/can-i-communicate-between-java-and-c-sharp-using-just-sockets – 2013-04-05 16:55:15

    +0

    爲什麼你需要這樣做?是否有某種需求超出了你的控制範圍,迫使你使用兩種不同的語言,或者這兩種應用程序已經存在或多或少存在? – 2013-04-05 16:55:26

    +1

    只需在java和C#應用程序之間創建一個命名管道。聽起來像你的情況最合適。在一般情況下只需查找「進程間通信」。程序之間有很多與語言無關的通信方式。 – Servy 2013-04-05 16:55:30

    回答

    3

    這聽起來像你想要某種形式的進程間通信機制。

    因此,任何允許通信可以採用:

    1. 命名管道
    2. 套接字
    3. TCP連接
    4. 共享內存

    出的選項,我會建議命名管道,因爲它們是最容易掌握的,並且沒有端口不可用等問題。

    參見:How to open a Windows named pipe from Java?

    和:Using Named Pipes for IPC in C#

    這篇文章:Using Named Pipes to communicate between C# and Java描述並使用管道從兩種環境的終端到終端的手段。

    0

    您可以將Java和C#程序合併爲一個,並使用JNI橋接C#/ Java接口。 JNI基本上允許你從Java調用C#方法,反之亦然。我想這個代碼同樣很難作爲套接字,再加上會有一些加速。

    此處瞭解詳情:http://www.codeproject.com/Articles/245622/Using-the-Java-Native-Interface-in-Csharp

    +0

    這不僅比其他一些方法更難,但我認爲它不是很好的設計。這裏我們有兩個需要溝通的邏輯上分離的程序。而不是讓他們彼此瞭解,並以這種方式將他們緊密結合在一起,他們可以通過一些IPC方法通過操作系統進行通信,從而減少耦合。 – Servy 2013-04-05 17:06:53

    0

    我不得不這樣做,在過去類似的東西,以獲得從Java系統的數據導入Excel(通過RTD API),並結束了與套接字協議的方式去。

    如果你有一個非常簡單的數據集(如上面提到的整數流),這應該是非常直接的 - 只需查看Java Socket和ServerSocket類的文檔以及相應的C#Socket類。

    如果你最終得到一個更復雜的API和多條消息等,你可能想看看Google協議緩衝區,因爲它們都有.Net和Java實現。