我奔向月亮而去 2024-01-30 14:22 采纳率: 0%
浏览 12

嵌入式 lwip UDP

lwip UDP server端,在回调函数里解析数据并回复,一段时间(10-50)分钟后,就接收不到数据了(client端一直在发:频率1秒钟12条,每条平均200字节) ,重新创建UDP块,也不能接收到数据, 只能通过重启才能重新接收。各位有什么更好的办法
回调函数如下:

img

建立过程:

img

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-01-30 14:23
    关注

    引自免费微信小程序:皆我百晓生

    问题分析: 从你的问题描述来看,你使用 lwIP 的 UDP server 端,在回调函数里解析数据并回复。在一段时间后,无法接收到数据,即使重新创建 UDP 块也不起作用,只能通过重启才能重新接收。可能的原因有:

    1. 内存泄漏:可能在处理数据时,没有及时释放内存,导致内存泄漏。
    2. 数据包丢失:可能是由于网络问题导致的数据包丢失。
    3. 代码bug:可能在回调函数中存在一些错误,导致无法正确解析数据或回复数据。

    解决方案: 以下是一些可能的解决方案,你可以尝试一下:

    1. 检查内存泄漏 检查你的代码是否存在内存泄漏问题。你可以使用一些内存泄漏检测工具,如valgrind等,来检测内存泄漏。确保在处理完数据后,及时释放相关的内存资源。

    2. 检查网络稳定性 确认你的网络环境是否稳定,没有数据包丢失的情况。你可以在 UDP server 端添加一些统计信息,如接收到的数据包数量、丢失的数据包数量等,来分析是否存在数据包丢失问题。如果发现数据包丢失,可以考虑优化网络环境,如增强信号、减少网络拥堵等。

    3. 检查回调函数的代码 仔细检查回调函数的代码,确保没有错误。你可以检查以下方面:

    • 确保正确解析数据:确认在回调函数中正确解析接收到的数据包,提取需要的数据。
    • 确保正确回复数据:确认在回调函数中正确构建回复数据包并发送。
    • 添加错误处理机制:在回调函数中添加错误处理机制,当解析数据或发送数据时发生错误时,能够进行适当的处理,如打印错误信息、重新发送数据等。

    4. 考虑使用定时器 你可以考虑使用定时器,在一定时间间隔内没有接收到数据时,自动重新创建 UDP 块。这样可以避免手动重启。

    希望以上解决方案对你有所帮助。如果问题仍然存在,请提供完整的代码和更多细节,以便我能够更好地帮助你解决问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 1月30日

悬赏问题

  • ¥15 而使用UE5引擎的 工具选项里 打开c++ visual studio 就会有部分显示加载失败 如图 加载失败的这张图 请问是什么原因
  • ¥15 mysql 对多个字段模糊查询,返回第一个匹配的字段
  • ¥15 the testing results of the whole dataset is empty
  • ¥15 can问题,往哥解决
  • ¥15 FFmpeg 成功推流到 Nginx RTMP 服务器但无法用 ffplay 或 VLC 播放
  • ¥15 请修改以下C语言代码使其能正确输出最短路径
  • ¥20 抖音商城拉码器安卓报错求解决办法或者有新的拉码脚本也可以介绍一下
  • ¥15 MPLAB IDE V2.35 报错make[2]: *** [build/default/production/_ext/1472/MSSP_I2C.p1] Error 1
  • ¥15 新唐M451 DTMF检测和发送代码修改
  • ¥15 在国外文献网站里点击view pdf 加载异常缓慢甚至加载不出来。