C++
からC#
にデータを送信する必要があります。 C++
側C#ZeroMQでメッセージからデータを抽出するには?
は、Linuxでは、私はZMQ
ライブラリversion 4.1.4
を使用しています。
C#
側は、4.1.5 version
に基づいてclrzmq4
ライブラリを使用しています。
だから私はC++
にメッセージを送信する一部:メッセージを取得するための
char tempStr[] = "ABCD";
zmq_msg_t zmsg;
zmq_msg_init_size(&zmsg, 4);
memcpy(zmq_msg_data(&zmsg), tempStr, 4);
int rc = zmq_send(reqSocket, &zmsg, sizeof(zmsg), 0);
zmq_msg_close(&zmsg);
C#
コード:
ZFrame request = responder.ReceiveFrame();
byte[] reqBytes = new byte[100];
int n = request.Read(reqBytes, 0, 100);
問題がzmq_msg_t
のすべての64のバイトを含むされたバイト配列です。実際のデータはオフセット16から始まります。
Question
- この場合、データを正しく抽出するにはどうすればよいですか? zmq_msg_t
が送信側から変更され、データが別の場所に配置される可能性があるため、自分のコードでオフセットをハードコーディングして抽出するのは簡単ではありません。他のオプションは、両側が同じプラットフォーム/フレームワークを使用していない場合にzmq_msg_t
を使用しないことです。 clrzmq4
フレームワークでは、zmq_msg_t
タイプの代理人がいますが、その使用方法や一般使用を意図しているかどうかはわかりません。
最初の15バイトは何ですか?ヘッダの場合は、そこにエンコードされたデータへのオフセットがあるかもしれません。そうでない場合は、オフセットをハードコードする以外に選択肢はありません。 – Kevin
C++コードで見ると、最初の8バイトは 'int64_t file_desc'で、他の8バイトはstructの中の' metadata_t * metadata'です。次にデータが来る。私はclrzmq4ライブラリの知識を持っている人がそれをどのように扱うかをヒントにしてくれることを期待していました。あるいは、データ抽出ルーチンを持つ他の.NETフレームワークをお勧めします。 – Pablo
マルチパートメッセージがZeroMQでどのようにアセンブルされているかを気を付けてください。他の記事で説明したように、低レベルで意図的に開発しない場合は、zmq_msg_tを直接使用して、より高レベルのAPIインターフェイスを使用しないでください。 – user3666197