微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > lwip tcp 注意事项(滑动窗口)

lwip tcp 注意事项(滑动窗口)

时间:10-02 整理:3721RD 点击:

最近利用lwip出现一个问题,lwip作为客服端与pc 进行tcp连接,连接成功后pc不断发送数据给lwip,当到2900左右时就不能在发送了,
分析如下:
(1)通过关闭pcb然后新建pcb又可以继续接收,说明是lwip的问题。
(2)然后经过多次少量,和少量多次的发送数据,结果一样都是到2900时就出现问题,判定接收函数是不是有问题。
最后通过网络捕获软件查看数据包分析得到,
lwip的滑动窗口越来越小,以至于pC不能在发送了。
捕获的数据包如下:


然后在对比st的例程,哈哈,结果发现人家的接收回调函数里面多了一个  tcp_recved(pcb, p->tot_len); 函数
最后在tcp接收回回调函数中添加了
tcp_recved(pcb, p->tot_len);
然后lwip就可以继续接收了 呵呵
捕获数据包如下 :


lwip函数原型


/**
* This function should be called by the application when it has
* processed the data. The purpose is to advertise a larger window
* when the data has been processed.
意思就说:在此函数需要在应用层调用,目的是:在应用程序处理后,是为了获得一个较大窗口的。
OK

问题解决~~~~~~

各位网友帮我顶顶啊  呵呵

先自己顶一个哈哈

您好 我在做lwip实验时,应用程序调用了tcp_recved(pcb, p->tot_len);
但是在应答了17个请求报文后(modbus), 客户端的窗口变为了0.不知是什么原因   求高手解答!

我的tcp也出现问题了,一次发送209个字节以上就会出错,进入hardhandle_error()一个硬件异常中断中,不知怎么处理的,请指教一下,Q332678503

你用的什么软件截取网络包

我用raw模式的用来和pc机ping,用的是官网的例子,怎么着也ping不通,不知道小编遇到过这种问题吗?

不知道LZ能接收多大的数据量?我现在也是接收小量数据是可以的,但是数据量一大就不行。是否能够分享一下LZ的代码

您好,可以把您的发送的那部分程序给我看看吗,我的不能连续发送。请求帮助

天天 或者其他人的问题,很有可能是pbuf 没有释放,导致pbuf被用尽,可以加我详聊

谢谢小编的资料

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top