使用zmq.h C++例子
时间: 2023-12-11 14:03:52 浏览: 175
zmq调用示例
3星 · 编辑精心推荐
这里提供一个使用zmq.h头文件的C++ ZeroMQ例子,包括一个publisher和一个subscriber:
Publisher:
```cpp
#include <zmq.h>
#include <string>
#include <iostream>
#include <unistd.h>
int main () {
// 创建一个ZeroMQ上下文
void* context = zmq_ctx_new();
// 创建一个PUB套接字
void* publisher = zmq_socket(context, ZMQ_PUB);
zmq_bind(publisher, "tcp://*:5556");
std::cout << "Publisher started" << std::endl;
// 发布消息
while (true) {
std::string message = "Hello from publisher";
zmq_msg_t zmq_message;
zmq_msg_init_size(&zmq_message, message.size());
memcpy(zmq_msg_data(&zmq_message), message.data(), message.size());
zmq_send(publisher, &zmq_message, 0);
std::cout << "Published message: " << message << std::endl;
sleep(1);
}
// 关闭套接字和上下文
zmq_close(publisher);
zmq_ctx_destroy(context);
return 0;
}
```
Subscriber:
```cpp
#include <zmq.h>
#include <string>
#include <iostream>
int main () {
// 创建一个ZeroMQ上下文
void* context = zmq_ctx_new();
// 创建一个SUB套接字
void* subscriber = zmq_socket(context, ZMQ_SUB);
zmq_connect(subscriber, "tcp://localhost:5556");
zmq_setsockopt(subscriber, ZMQ_SUBSCRIBE, "", 0);
std::cout << "Subscriber started" << std::endl;
// 接收消息
while (true) {
zmq_msg_t zmq_message;
zmq_msg_init(&zmq_message);
zmq_recv(subscriber, &zmq_message, 0);
std::string message(static_cast<char*>(zmq_msg_data(&zmq_message)), zmq_msg_size(&zmq_message));
std::cout << "Received message: " << message << std::endl;
zmq_msg_close(&zmq_message);
}
// 关闭套接字和上下文
zmq_close(subscriber);
zmq_ctx_destroy(context);
return 0;
}
```
这个例子中,publisher向TCP地址`*:5556`发布消息,subscriber连接到该地址并订阅所有消息。当publisher发布消息时,subscriber会接收并输出该消息。需要注意的是,zmq.h的使用方式与zmq.hpp略有不同。
阅读全文