0
我需要將數據從C++
發送到C#
。如何從C#ZeroMQ中的消息中提取數據?
在C++
側,在Linux下,我使用ZMQ
庫version 4.1.4
。
C#
旁邊正在使用clrzmq4
庫基於4.1.5 version
。
那麼,我在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);
的問題是,字節陣列包括所有64個字節的zmq_msg_t
。實際數據從偏移量16開始。
Question
- 如何在這種情況下正確提取數據?通過硬編碼提取我的代碼中的偏移量非常難看,因爲有一天zmq_msg_t
可能會從發送端更改,並且數據將位於其他位置。其他選項是避免使用zmq_msg_t
,當雙方都不使用相同的平臺/框架時。在clrzmq4
框架中,我可以看到有zmq_msg_t
類型的代表,但不確定如何使用它們以及它們是否用於公共用途。
前15個字節是什麼?如果它是一個頭文件,那麼它可能與這裏編碼的數據有偏移量。如果沒有,您將別無選擇,只能對偏移進行硬編碼。 – Kevin
在C++代碼中,前8個字節是'int64_t file_desc',其他8個字節是'metadata_t * metadata'裏面的struct。然後是數據。我希望有人瞭解clrzmq4庫可能會提示如何處理它。或者也許推薦其他帶有數據提取例程的.NET框架。 – Pablo
請注意ZeroMQ中如何組裝多部分消息。正如您在其他文章中所解釋的那樣,如果不是有意在低級別開發,請避免直接使用zmq_msg_t並使用更高級別的API接口。 – user3666197