TCP发送CJSON字符串示例代码
发布日期:2021-05-07 20:42:39 浏览次数:18 分类:精选文章

本文共 1272 字,大约阅读时间需要 4 分钟。

在实际编写代码时,确保对JSON数据结构的正确处理至关重要。以下是关于实现一个TCP发送心跳机制的关键步骤说明:

1. JSON对象的构建

首先,我们创建一个空的cJSON对象作为根节点:

cJSON * root11 = 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));

然后,为"data"字段创建一个子对象:

cJSON * item11 = cJSON_CreateObject();cJSON_AddItemToObject(item11, "ip", cJSON_CreateString(ipsbuf));cJSON_AddItemToObject(item11, "cishu", cJSON_CreateNumber(fasong_cishu));

最后,将"data"字段添加到根节点中:

cJSON_AddItemToObject(root11, "data", item11);

2. 数据的发送

使用rt_sprintf函数格式化IP地址:

rt_sprintf(ipsbuf, "%d.%d.%d.%d", my_work_ipaddr[0], my_work_ipaddr[1], my_work_ipaddr[2], my_work_ipaddr[3]);

将根节点转换为字符串:

out_str11 = cJSON_PrintUnformatted(root11);

发送数据到TCP socket:

ret = send(mytcp_sock, out_str11, strlen(out_str11), 0);

处理发送结果:

if (ret < 0) {    return;} else if (ret == 0) {    rt_kprintf("\n Send warning,send function return 0.\r\n");}

3. 内存管理

确保正确释放所有动态分配的内存:

cJSON_Delete(root11);rt_free(out_str11);

特别注意以下几点:

  • cJSON_Delete函数会自动释放根节点及其所有子节点,减少手动管理的复杂性
  • rt_free用于释放动态分配的内存,避免内存泄漏
  • 在调用cJSON_PrintUnformatted后,及时释放生成的字符串,防止内存泄漏
  • 通过以上步骤,可以实现一个稳定且高效的TCP心跳机制,在实际应用中需要根据具体需求调整相关参数和逻辑。

    上一篇:LWIP协议栈[I/drv.emac] RxCpltCallback err = -3错误解决办法
    下一篇:stm32f407单片机rt thread 片外spi flash OTA升级配置示例

    发表评论

    最新留言

    初次前来,多多关照!
    [***.217.46.12]2025年04月13日 01时09分14秒