[英]ZMQ PUSH PULL half of each message sent
我正在尝试发送图像流,每个图像流约3.5Mb。 要发送,我正在使用以下格式的代码:
zmq::socket_t sender (*context, ZMQ_PUSH);
sender.connect("tcp://....:5556");
while(...){
zmq::message_t msg (data, (size_t)camHeight*camWidth, NULL,NULL);
sender.send(msg, ZMQ_NOBLOCK);
}
并收到:
zmq::socket_t socket(zmqContext, ZMQ_PULL);
socket.bind("tcp://*:5556");
zmq::message_t msg;
while(..){
socket.recv(&msg);
unsigned char* data = (unsigned char*) msg.data();
...
outFile.write ((char*) data, msg.size());
}
我希望通过的所有图像都可以通过,并且味精的大小符合预期,但是,图像被“裁剪”了-直到图像上的水平线(每个图像中的同一行),图像是正确的,然后完全是黑色的。 有时在黑色部分会有些杂音。
有谁知道这可能是什么原因?
ZeroMQ发送函数(无论是两种类型,还是自计数data.sizeOf()
) 都可以 透明且按字面意思进行传递。
指示发送的字节数(或字节数)确实发送。
没有例外,没有任何借口。
因此,如果您指示ZeroMQ仅发送原始文件的一小部分,那么您就可以了。 您只得到了指示的分数(无论是有意还是有误)。
修复您的数据-“ 成帧 ”(在这种情况下为数据-“截止”),或使用安全模式,自动包装的容器来传递内容,而与可变大小无关。
如有疑问,只需尝试将图像数据放入JSON或什至更易于阅读的情况下,将其存储在ZIP文件中以进行此类测试。
然后,将其移动到ZeroMQ消息传递层上,并尝试从JSON / ZIP文件内部重构数据。
在那里,您会注意到截止失败的根源-数据量计算错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.