STM32F407-LwIP_TCP_Echo_Server移植累积多个数据包

2019-07-14 13:08发布

我是参考LwIP_TCP_Echo_Server这个例子,用的STM32F407移植的,网络连接正常,通信都通了,但是最近严格测试的时候发现个奇怪的问题。
测试环境:1。电脑端打开网络助手,用tcp_client模式连接板子(tcp_server),并成功建立连接
2。用网络助手向板子(tcp_server)发送数据


出现问题现象如下:当我手动发送数据或自动发送间隔大于250ms时,板子(tcp_server)端接收数据正常,但当我自动发送间隔小于100ms时,板子(tcp_server)端接收一包数据,我解析出来会是我发送的两包或三包。问题例子如下,当我电脑端发送“01 03 00 20 00 08 45 C6”这包数据时,出现问题时板子会接收到“01 03 00 20 00 08 45 C6 01 03 00 20 00 08 45 C6 01 03 00 20 00 08 45 C6”这样一组数据,正好是我发送数据的整包数,这样我的应用程序就没法解析啦,整了两天了也没弄出来,望高手指点下。


我对问题的分析:因为例子中,对以太网包用的是轮询模式,所以我怀疑是轮询模式慢,当我发送数据包间隔小于100ms时,以太网DMA的收数据快于我处理接收数据的速度,所以会累积多个数据包,导致上述现象的发生,但没找到解决办法。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
maqyun
1楼-- · 2019-07-16 02:59
小点zze
2楼-- · 2019-07-16 06:18
楼主你好,我也遇到同样问题,我从客户端每次发送512字节,自定义了包头。但是板子接收到的大小不等,用wareshark抓包发现包大小由1460的,78长度的等等,不是512整数倍。wareshark抓到的长度就是arm收到的包长度,这样等于好几包拼成一个,或者半个包之类的,导致接收端无法解析。

一周热门 更多>