簡體   English   中英

ZMQ PUSH PULL發送的每個消息的一半

[英]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

ZeroMQ發送函數(無論是兩種類型,還是自計數data.sizeOf()都可以 透明且按字面意思進行傳遞。

指示發送的字節數(或字節數)確實發送。

沒有例外,沒有任何借口。

因此,如果您指示ZeroMQ僅發送原始文件的一小部分,那么您就可以了。 您只得到了指示的分數(無論是有意還是有誤)。


如何證明呢?

修復您的數據-“ 成幀 ”(在這種情況下為數據-“截止”),或使用安全模式,自動包裝的容器來傳遞內容,而與可變大小無關。

如有疑問,只需嘗試將圖像數據放入JSON或什至更易於閱讀的情況下,將其存儲在ZIP文件中以進行此類測試。

然后,將其移動到ZeroMQ消息傳遞層上,並嘗試從JSON / ZIP文件內部重構數據。

在那里,您會注意到截止失敗的根源-數據量計算錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM