C++ zmq pull push模式 任意条数据发收
时间: 2024-03-20 20:45:00 浏览: 291
在 ZeroMQ 中,使用 push-pull 模式时,发送方可以发送任意数量的消息,接收方也可以接收任意数量的消息。如果您想在接收方接收任意数量的数据,可以使用循环来不断接收消息,直到您认为接收完毕为止。
以下是一个示例代码,演示了如何在 C++ 中使用 ZeroMQ 的 push-pull 模式来发送和接收任意数量的消息:
**发送方**
```cpp
#include <zmq.hpp>
#include <iostream>
#include <string>
int main() {
zmq::context_t context(1);
zmq::socket_t sender(context, ZMQ_PUSH);
sender.bind("tcp://*:5555");
// 发送任意数量的消息
std::string message;
while (std::getline(std::cin, message)) {
zmq::message_t msg(message.size());
memcpy(msg.data(), message.c_str(), message.size());
sender.send(msg);
}
return 0;
}
```
**接收方**
```cpp
#include <zmq.hpp>
#include <iostream>
#include <string>
int main() {
zmq::context_t context(1);
zmq::socket_t receiver(context, ZMQ_PULL);
receiver.connect("tcp://localhost:5555");
// 接收任意数量的消息
while (true) {
zmq::message_t msg;
receiver.recv(&msg);
std::string message(static_cast<char*>(msg.data()), msg.size());
std::cout << "Received message: " << message << std::endl;
// 判断是否接收完毕
if (message == "last message") {
break;
}
}
return 0;
}
```
在上面的示例代码中,发送方使用 while 循环不断从标准输入中获取消息并发送,接收方也使用 while 循环接收任意数量的消息,直到接收到特定的消息为止。如果您想在接收方接收任意数量的数据,只需将 `if (message == "last message")` 的判断条件修改为您自己的判断条件即可。需要注意的是,如果您在发送方发送了一个空消息,那么接收方的 `recv()` 函数将会阻塞,直到接收到消息为止,因此您需要在发送方发送完消息后再发送一个特定的消息,以便接收方知道已经接收完毕。
阅读全文
相关推荐


















