我很難理解如何正確使用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