正确的用法是:在收到数据后,应用层调用tcp_recved函数恢复原来的窗口大小;而在发送函数中,不用管窗口的事! 源码全部贴在后面,这里讲解一些需要注意的地方 第一点 接收数据的PCB控制块只能是tcp_active_pcbs上面的,而不是我们创建的那个用于tcp_listen的监听控制块,这个块其实一直处于LISTEN状态,是不能收发数据的。...
接收完数据后,调用tcp_recved扩大窗口。tcp_recved函数中,最关键的代码是 pcb->rcv_wnd += len; 也就是恢复或扩大窗口的意思。为什么呢? 因为tcp_receive函数在收到数据后,会把窗口缩小,表示接收数据的空间被刚收到的数据占用了,所以你在tcp_receive中可以看到这样的语句, pcb->rcv_wnd -= tcplen; pcb->r...
通常在TCP控制块recv字段注册的回调函数中,用户在完成数据的处理后,必须调用tcp_recved更新接收窗口。
下TcpProcessTransmission这个函数,这个是我自己写的,可以在程序的任意地方任何时候调用,用来发送数据的函数。 重点要注意是, 在tcp_echoserver_recv中,有两个地方我调用了tcp_recved函数。 /* °ü¬Í·Îļþ ---*/ #include "tcp_echoserver.h" #if LWIP_TCP // private type def --- stru...