基于富瀚6630平台,移植cJSON库,使用tcp协议制作http-json客户端发送js字段

26 篇文章 0 订阅
2 篇文章 0 订阅
本文介绍了如何在富瀚6630平台上移植cJSON库,并利用它创建一个TCP JSON客户端,实现HTTP请求,包括Makefile的修改、源码编写与Wireshark抓包分析。重点展示了json对象构造和发送过程,以及抓包验证结果。
摘要由CSDN通过智能技术生成

修改Cjson库编译MakeFile

在这里插入图片描述

1. 修改CC编译工具为富瀚工具链
2. 直接make生成动静态库

修改client的MakeFile进行编译

在这里插入图片描述

  1. 修改CC编译工具为富瀚工具链
  2. 个人比较喜欢使用静态库,修改为使用静态库链接编译

附上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"
	}
}

打印信息:
在这里插入图片描述

源码下载

点这点这~~~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

I&You

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值