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被用尽,可以加我详聊
谢谢小编的资料