不要忽视recv函数的返回。 干 if(socket.recv(...)) { // Process image } 在接收期间出现错误时将避免执行代码。
if(socket.recv(...)) { // Process image }
您正在使用REQ / REP Socket。 这是一个同步协议。 REQ最初可以发送消息,并且只要他们没有对请求的回复就处于阻止状态。 REP可以最初接收消息,并且只要他们没有回答请求就处于阻止状态。
收到第一张图片后回复REQ套接字或使用其他图案:ZMQ_PAIR,PUSH / PULL,ROUTER / DEALER都可以在您的情况下工作。 阅读文档以了解不同的模式 。
此外,您不必将字符串转换为图像。你可以直接发送 std::vector<uint8_t> 使用zmq:您可以使用访问基础指针 std::vector::data() 和 memcpy(message.data(), vector.data(), vector.size()) 。
std::vector<uint8_t>
std::vector::data()
memcpy(message.data(), vector.data(), vector.size())