3

サードパーティのサーバーからデータを受信し、それを一連の整数に処理する C# で記述されたプログラムがあります (それらは急速にストリーミングされます)。サードパーティがデータを処理するためのクラスを提供しているため、プログラムは C# で記述されていますが、C# でしか提供されていません。これらの整数を取得し、Java プログラムでストリーミングの方法で使用したいと考えています (そのため、C# プログラムによってストリーミングおよび処理されるとすぐに、Java プログラムで整数を使用したいと考えています)。2 番目のプログラムは Java で作成されています。これは、別のサードパーティが (必要な) クラスを Java でしか提供していないためです。それで、何をすべきかについての私の推測は、どちらかです-

  1. Java で C# クラスを実行するプログラムを探し、受信データを直接処理する C# クラスを Java プログラムに含めます [これはあまり期待できそうにありません - jni4net を取得できないようです。投稿、仕事へ]

また

  1. 処理中の整数を特定のメモリ位置に保存する別のプログラムを C# で作成します。プログラムをコンパイルします。次に、Java ソース コード内から実行可能ファイルを実行し、特定のメモリ位置の整数が変更されたときに取得する何らかのコールバックを Java コードに記述し、これらの新しい数値が何であるかを記録します [これを開始する方法がわからない! ]

痛みが最も少ないアプローチについて何か提案はありますか?

4

3 に答える 3

3

何らかの形のプロセス間通信メカニズムが必要なようです。

そのため、通信を許可するものなら何でも使用できます。

  1. 名前付きパイプ
  2. ソケット
  3. TCP 接続
  4. 共有メモリ

オプションのうち、名前付きパイプは把握が最も簡単で、ポートが利用できないなどの問題がないため、名前付きパイプをお勧めします。

参照: Java から Windows 名前付きパイプを開くには?

そして: C# で IPC に名前付きパイプを使用する

この投稿: Using Named Pipes to communicate between C# and Java では、両方の環境からパイプを使用するエンド ツー エンドの方法について説明しています。

于 2013-04-05T16:58:43.493 に答える
0

Java と C# プログラムを 1 つにマージし、JNI を使用して C#/Java インターフェースを橋渡しすることができます。JNI を使用すると、基本的に Java から C# メソッドを呼び出すことができ、その逆も可能です。これはソケットと同じくらいコーディングが難しく、さらにスピードアップもあると思います。

詳細はこちら: http://www.codeproject.com/Articles/245622/Using-the-Java-Native-Interface-in-Csharp

于 2013-04-05T17:03:21.420 に答える
0

以前は、Java システムから Excel に (RTD API を介して) データを取得するために似たようなことをしなければならず、最終的にはソケット プロトコル アプローチを採用しました。

本当に単純なデータセット (上記の整数のストリームなど) がある場合、これは非常に簡単です。Java Socket クラスと ServerSocket クラス、および対応する C# Socket クラスのドキュメントを参照してください。

複数のメッセージなどを含む、より複雑な API になる場合は、.Net と Java の両方の実装があるため、Google Protocol Buffers を参照することをお勧めします。

于 2013-04-05T17:27:02.637 に答える