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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

//接收端
#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;
}