C++ zmq 通信收发json
时间: 2023-07-29 12:06:10 浏览: 364
c++ ZMQ 接受发送端
在 C++ 中使用 ZeroMQ 进行 JSON 消息的收发,可以使用 `nlohmann/json` 库进行 JSON 数据的序列化和反序列化。下面是一个简单的示例代码:
```cpp
#include <iostream>
#include <string>
#include <zmq.hpp>
#include "json.hpp"
using json = nlohmann::json;
int main() {
zmq::context_t context(1);
zmq::socket_t socket(context, ZMQ_REQ);
// 连接到目标地址
socket.connect("tcp://localhost:5555");
// 准备要发送的数据
json data = {
{"name", "Alice"},
{"age", 30}
};
// 将数据转换为 JSON 字符串
std::string json_data = data.dump();
// 发送 JSON 消息
zmq::message_t request(json_data.size());
memcpy(request.data(), json_data.c_str(), json_data.size());
socket.send(request);
// 等待并接收回复
zmq::message_t reply;
socket.recv(&reply);
// 将回复的 JSON 字符串转换为字典
std::string json_reply(static_cast<char*>(reply.data()), reply.size());
json reply_data = json::parse(json_reply);
// 打印回复的数据
std::cout << reply_data << std::endl;
return 0;
}
```
在上面的代码中,首先创建了 ZeroMQ 上下文和套接字,并使用 `connect()` 方法连接到目标地址。接着,准备要发送的数据,并使用 `dump()` 方法将其转换为 JSON 字符串。将 JSON 字符串拷贝到一个 ZeroMQ 消息中,并使用 `send()` 方法发送 JSON 消息。然后等待并接收回复,将回复的消息转换为 JSON 字符串,并使用 `parse()` 方法将其解析为字典类型。最后打印回复的数据。
在接收端,可以使用以下代码进行 JSON 消息的接收和回复:
```cpp
#include <iostream>
#include <string>
#include <zmq.hpp>
#include "json.hpp"
using json = nlohmann::json;
int main() {
zmq::context_t context(1);
zmq::socket_t socket(context, ZMQ_REP);
// 绑定到指定地址
socket.bind("tcp://*:5555");
while (true) {
// 接收 JSON 消息
zmq::message_t request;
socket.recv(&request);
// 将 JSON 字符串转换为字典
std::string json_data(static_cast<char*>(request.data()), request.size());
json data = json::parse(json_data);
// 打印接收到的数据
std::cout << data << std::endl;
// 准备要回复的数据
json reply_data = {
{"status", "ok"}
};
// 将回复的数据转换为 JSON 字符串
std::string json_reply = reply_data.dump();
// 发送 JSON 回复
zmq::message_t reply(json_reply.size());
memcpy(reply.data(), json_reply.c_str(), json_reply.size());
socket.send(reply);
}
return 0;
}
```
在上面的代码中,首先创建了 ZeroMQ 上下文和套接字,并使用 `bind()` 方法将套接字绑定到指定地址。然后进入一个无限循环,不断接收 JSON 消息,并将其解析为字典类型。接着打印接收到的数据,并准备要回复的数据。将要回复的数据转换为 JSON 字符串,并拷贝到一个 ZeroMQ 消息中。最后使用 `send()` 方法发送 JSON 回复。
以上就是使用 ZeroMQ 进行 JSON 消息的收发的示例代码,希望能对你有所帮助。
阅读全文