void mytcp_send_heartbeat(void)
{
int ret;
char *out_str11;
char ipsbuf[20];
cJSON * root11 = cJSON_CreateObject();
cJSON * item11 = cJSON_CreateObject();
cJSON_AddItemToObject(root11, "cmd", cJSON_CreateString("heartbeat"));//根节点下添加
cJSON_AddItemToObject(root11, "model", cJSON_CreateString(XUNJIAN_ROBOT_TYPE));
cJSON_AddItemToObject(root11, "robot_id", cJSON_CreateNumber(Lock_Code));
cJSON_AddItemToObject(root11, "data", item11);//root节点下添加data节点
rt_sprintf(ipsbuf,"%d.%d.%d.%d",my_work_ipaddr[0],my_work_ipaddr[1],my_work_ipaddr[2],my_work_ipaddr[3]);
cJSON_AddItemToObject(item11, "ip", cJSON_CreateString(ipsbuf));//data节点下添加ip节点
cJSON_AddItemToObject(item11, "cishu", cJSON_CreateNumber(fasong_cishu));//发送次数
fasong_cishu ++;
out_str11 = cJSON_PrintUnformatted(root11);
cJSON_Delete(root11);
rt_kprintf("%s\n", out_str11);
ret = send(mytcp_sock, out_str11, strlen(out_str11), 0);/* 发送数据到sock连接 */
rt_free(out_str11);
if(ret < 0)
{
return;
}
else if (ret == 0)
{
rt_kprintf("\n Send warning,send function return 0.\r\n");/* 打印send函数返回值为0的警告信息 */
}
}
使用cJSON * root11 = cJSON_CreateObject();
创建json对象后要使用cJSON_Delete(root11);释放内存
释放时只需要释放根节点即可,子节点自动释放
TCP发送完json字符串后要使用rt_free(out_str11);释放out_str11这个指针,要不程序运行一段时间后会报错。
调用out_str = cJSON_PrintUnformatted(datajson);后必须要释放out_str,否则会内存泄漏。
rt_free(out_str);