You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Conception/接收端.h

79 lines
1.9 KiB

1 year ago
//接收端
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <json/json.h>
using namespace std;
int main() {
//创建
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
perror("socket error");
exit(1);
}
struct sockaddr_in addr;
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = INADDR_ANY;
addr.sin_port = htons(8888); // 绑定端口号,改!
if (bind(sockfd, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
perror("error");
exit(1);
}
if (listen(sockfd, 5) < 0) { // 监听socket
perror("listen error");
exit(1);
}
int connfd;
struct sockaddr_in cliaddr;
socklen_t clilen = sizeof(cliaddr);
if ((connfd = accept(sockfd, (struct sockaddr *)&cliaddr, &clilen)) < 0) { // 接受连接
perror("accept error");
exit(1);
}
char buf[BUF_SIZE];
int len, count = 0;
memset(buf, 0, sizeof(buf));
recv(connfd, buf, size, 0); // 接收JSON数据长度size 通常是1024
len = atoi(buf);
string json_str;
for (int i = 0; i < len; i += BUF_SIZE) { // 分批接收JSON数据
int size = min(BUF_SIZE, len - i);
recv(connfd, buf, size, 0);
printf("Receive JSON packet %d\n", ++count); // 打印接收的JSON数据包编号
json_str.append(buf, size);
usleep(10000); // 10ms循环
}
Json::Value json_data;
Json::Reader reader;
if (!reader.parse(json_str, json_data)) { // 解码为JSON对象
cerr << "parse error" << endl;
exit(1);
}
cout << "x: " << json_data["x"].asString() << endl;
cout << "y: " << json_data["y"].asString() << endl;
cout << "z: " << json_data["z"].asString() << endl;
close(connfd);
close(sockfd);
return 0;
}