gpt4 book ai didi

c++ - 我如何使用 ZeroMQ 接收多部分消息?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:13:04 26 4
gpt4 key购买 nike

我无法让 ZeroMQ C++ 包装器接收多部分消息。使用 C 版本的相同代码工作得很好,但它会导致异常,而 C++ 根本没有任何解释。多部分处理代码如下:

int _tmain(int argc, _TCHAR* argv[])
{
zmq::context_t context(1);
zmq::socket_t socket(context, ZMQ_REP);
socket.bind("tcp://*:5555");

while(true) {
// the following two lines lead to exception
zmq::message_t request;
socket.recv(&request);

//zmq_msg_t message;
//zmq_msg_init (&message);
//zmq_recv (socket, &message, 0);
}

return 0;
}

非常简单;这个版本不工作。但是如果我注释掉 while 循环中的前两行并取消注释当前注释的(C 版本)代码,它就可以工作。这是 Windows XP sp3、Zeromq 2.1.1 和 Visual Studio 2010 Express。

如果我发送单部分消息,两个版本都可以正常工作。我究竟做错了什么?

最佳答案

可能C版的代码也不起作用,但是你没有检查zmq_recv的返回码,所以你没有注意到它。此外,当接收 miltipart 消息时,您应该检查是否有更多消息部分要通过套接字接收,如下所示:

int64_t more = 0;
size_t more_size = sizeof(more);
socket.getsockopt(ZMQ_RCVMORE, &more, &more_size);
if (more != 0)
{
//has more parts
}

另外,看看 ZmqMessage C++ library专为发送和接收 ZeroMQ 多部分消息而设计。

关于c++ - 我如何使用 ZeroMQ 接收多部分消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6203539/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com