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