基于富瀚6630平台,移植cJSON库,使用tcp协议制作http-json客户端发送js字段
修改Cjson库编译MakeFile
1. 修改CC编译工具为富瀚工具链
2. 直接make生成动静态库
修改client的MakeFile进行编译
- 修改CC编译工具为富瀚工具链
- 个人比较喜欢使用静态库,修改为使用静态库链接编译
附上client源码
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (-1 == sockfd)
{
perror("socket");
exit(1);
}
struct sockaddr_in server_addr;
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(8127);//指定与服务器连接的端口
server_addr.sin_addr.s_addr = inet_addr("172.20.10.9");//指定服务器地址
//向服务器发起连接
int ret = connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr));
if (-1 == ret)
{
perror("connect");
exit(1);
}
char *sndbuf = calloc(1, 1000);
cJSON *result = cJSON_CreateObject();//创建并开始添加json信息
cJSON_AddStringToObject(result,"method","debug_get_vs_status");
if(result){
cJSON *param = cJSON_CreateObject();
cJSON_AddItemToObject(result, "param", param);
//cJSON_AddNumberToObject(param, "channelid", 0);
cJSON *user = cJSON_CreateObject();
cJSON_AddItemToObject(result, "user", user);
cJSON_AddStringToObject(user, "name", "admin");
cJSON_AddStringToObject(user, "digest", "3264edee7cdb693bc3f2e7714c7ca626");
}
char *buf = cJSON_Print(result);//把json转化为文本
http_request(sndbuf, 1000,strlen(buf));//添加头部信息
strncat(sndbuf,buf,strlen(buf));//连接头部信息和json数据
ret = send(sockfd, sndbuf, strlen(sndbuf), 0);
if (-1 == ret)
{
perror("send");
exit(1);
}
printf("字符串 %s 发送成功 长度 %ld!\n", sndbuf, strlen(sndbuf));
free(sndbuf);
// 等待接收 HTTP 响应头部(头部一定以\r\n\r\n结束)
int m = 0; // 头部的大小
char *recvbuf = calloc(1, 4096);
while(1)
{
int n = recv(sockfd, recvbuf+m, 1, 0);
if(n == -1)
{
perror("recv() failed");
exit(0);
}
m += n;
if(strstr(recvbuf, "\r\n\r\n"))
break;
}
printf("响应报文头部:\n");
printf("*******************************\n");
printf("%s", recvbuf);
printf("*******************************\n");
// 分析头部信息,比如响应码、正文长度……
char *s = "Content-Length: ";
char *p = strstr(recvbuf, s);
int json_len;
if(p != NULL)
{
json_len = atoi(p+strlen(s));
}
//printf("正文的长度: %d\n", json_len);
// 接收正文(JSON数据)
char *json = calloc(1, json_len);
int total = 0;
while(json_len > 0)
{
int n = read(sockfd, json+total, json_len);
json_len -= n;
total += n;
}
printf("JSON数据:\n");
printf("*******************************\n");
printf("%s", json);
printf("*******************************\n");
使用wireshark抓包并查看打印结果
wireshark抓包结果:
抓包还可以用跟踪流方便查看
àbUhl)E/ùù@@ó??
?
*?á?àVv?N?
?ke? x?m_POST /grpcService HTTP/1.1
Content-Length: 133
Content-Type: application/json;charset=utf-8
Connection: close
{
"method": "debug_get_vs_status",
"param": {
},
"user": {
"name": "admin",
"digest": "3264edee7cdb693bc3f2e7714c7ca626"
}
}
打印信息: