C++使用TCP完成JSON数据传输
时间: 2023-10-14 17:07:29 浏览: 124
要使用C++完成TCP数据传输,可以使用socket库。以下是一个简单的示例代码,演示如何使用JSON格式进行数据传输:
```C++
#include <iostream>
#include <cstring>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <nlohmann/json.hpp>
using json = nlohmann::json;
int main(int argc, char const *argv[]) {
int sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock == -1) {
std::cerr << "Failed to create socket" << std::endl;
return 1;
}
sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
server_addr.sin_port = htons(12345);
if (connect(sock, (sockaddr*)&server_addr, sizeof(server_addr)) == -1) {
std::cerr << "Failed to connect to server" << std::endl;
return 1;
}
json j;
j["name"] = "Alice";
j["age"] = 20;
std::string message = j.dump();
if (send(sock, message.c_str(), message.size(), 0) == -1) {
std::cerr << "Failed to send data" << std::endl;
return 1;
}
char buffer[1024] = {0};
int received_size = recv(sock, buffer, sizeof(buffer), 0);
if (received_size == -1) {
std::cerr << "Failed to receive data" << std::endl;
return 1;
}
json response = json::parse(buffer, buffer + received_size);
std::cout << "Received response: " << response.dump() << std::endl;
close(sock);
return 0;
}
```
在这个示例中,我们使用了nlohmann/json库来处理JSON数据。首先创建了一个JSON对象,将数据填入其中,并使用`dump()`方法将其转换为字符串。
然后,使用`socket()`函数创建一个套接字,并使用`connect()`函数连接到服务器。发送数据时,使用`send()`函数将JSON字符串发送给服务器。接收数据时,使用`recv()`函数接收服务器的响应,并将其解析为JSON对象。
需要注意的是,在实际应用中,需要添加错误处理和异常情况的处理。
阅读全文