C++使用zmq 实现 dealer 和router 客户端发送,服务端接收的代码
时间: 2024-03-29 20:39:27 浏览: 105
c++ ZMQ 接受发送端
以下是使用C++和zmq实现dealer和router模式的客户端发送和服务端接收的示例代码:
服务端代码:
```cpp
#include <zmq.hpp>
#include <iostream>
int main()
{
zmq::context_t context(1);
zmq::socket_t socket(context, zmq::socket_type::router);
socket.bind("tcp://*:5555"); // 绑定端口
while (true)
{
zmq::message_t identity_msg, request_msg;
socket.recv(&identity_msg); // 接收客户端的身份信息
socket.recv(&request_msg); // 接收客户端的请求消息
std::string identity(static_cast<char*>(identity_msg.data()), identity_msg.size());
std::string request(static_cast<char*>(request_msg.data()), request_msg.size());
std::cout << "Received request from " << identity << ": " << request << std::endl;
// 回复客户端
zmq::message_t reply_msg(request.size());
memcpy(reply_msg.data(), request.data(), request.size());
socket.send(identity_msg, zmq::send_flags::sndmore);
socket.send(reply_msg, zmq::send_flags::none);
}
return 0;
}
```
客户端代码:
```cpp
#include <zmq.hpp>
#include <iostream>
int main()
{
const std::string endpoint = "tcp://localhost:5555";
zmq::context_t context(1);
zmq::socket_t socket(context, zmq::socket_type::dealer);
// 设置客户端的身份信息
std::string identity = "client1";
socket.setsockopt(ZMQ_IDENTITY, identity.data(), identity.size());
socket.connect(endpoint);
// 发送请求消息
std::string request = "Hello, server!";
zmq::message_t request_msg(request.size());
memcpy(request_msg.data(), request.data(), request.size());
socket.send(request_msg, zmq::send_flags::none);
// 接收回复消息
zmq::message_t identity_msg, reply_msg;
socket.recv(&identity_msg);
socket.recv(&reply_msg);
std::string server_identity(static_cast<char*>(identity_msg.data()), identity_msg.size());
std::string reply(static_cast<char*>(reply_msg.data()), reply_msg.size());
std::cout << "Received reply from " << server_identity << ": " << reply << std::endl;
return 0;
}
```
在上述代码中,服务端使用router模式,绑定端口并接收客户端的身份信息和请求消息,然后回复客户端。客户端使用dealer模式,设置自己的身份信息后连接服务端,发送请求消息并接收服务端的回复消息。
阅读全文