我很难理解如何正确使用0MZ。当我试图发送大于29的初始化消息时,出现了问题。我的代码是非常简单的:ZeroMQ - 使用REQ套接字发送超过30个字节
zmq::context_t context (1);
zmq::socket_t req(context,ZMQ_REQ);
req.connect("tcp://localhost:6969");
int msgSize = 100;
zmq::message_t test(msgSize);
snprintf((char*)test.data(),msgSize,"short message");
cout << static_cast<char*>(test.data())<< endl; // this is always fine - 'short message'
到目前为止好,但发送此消息后,如果msgSize
> 29,我不能得到相同的结果再次
req.send(test);
cout << static_cast<char*>(test.data())<< endl; // now it's gibberish, like '&?+#'
什么是更令人费解的,如果我的服务器收到这个字看起来很像“?& +#”那里,但如果是单纯与PUB套接字发送回来的消息,我可以在我的客户看了一遍:
zmq::message_t reply;
req.recv(&reply);
cout << static_cast<char*>(test.data())<< endl; - 'my message' again!
我unders tand,短消息有29个字节的限制,但是我怎样才能解决它,而不处理多部分消息?我真的需要像40个字符....
根据[zmq_send()](http://api.zeromq.org/2-1:zmq-send)的0MQ文档,成功调用该函数('zmq :: socket_t :: send')它)破坏消息。所以在消息排队后,你不应该访问数据成员**。它适用于较小的消息可能是一个实现人工制品。 – 2014-10-01 07:11:59
但是为什么我的信息也在服务器上搞砸了? – 2014-10-01 07:16:59
请注意,在显示的最后3行代码中,接收到的消息被称为“reply”,但您仍然会打印“test”的数据内容。 – 2014-10-01 10:55:10