LWIP裸机情况下,TCP如何进行流量控制?

2020-01-07 19:24发布

STM32上运行LWIP作为主机,计算机作为从机。
网络传输速度很快,处理速度较慢。
所以就需要通过流量控制来进行协调,不然STM32的内存很快就爆掉了。

现在使用的是裸奔,也就是在回调函数里面处理接收到的数据。
这种情况下,如何进行流量控制呢,
比如,我收到100K字节后,需要让网络传输停止1秒。然后继续。
我直觉的想法是,收完数据后,再次进入收到数据的回调函数,直接不处理就退出了。

但是带来的问题就是,后续的传输再也没法启动。
目前没有想到好方法来实现这一需求。
请有经验的大虾指导一下,谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
tbbt
1楼-- · 2020-01-07 19:25
和计算机通讯协议加条暂停指令,收到100K字节发一下暂停指令给计算机上位机软件,让它歇歇再发
aozima
2楼-- · 2020-01-07 20:42
TCP自动滑窗,所以天生带流控特性。
kingaaa
3楼-- · 2020-01-08 02:08
TCP滑动窗口,拥塞机制,都替你做好了
love_ourdev
4楼-- · 2020-01-08 04:26
 精彩回答 2  元偷偷看……
love_ourdev
5楼-- · 2020-01-08 05:12
本帖最后由 love_ourdev 于 2019-4-20 17:24 编辑

我刚才看了看自己以前的代码,找到了肯定有效的方法。就是在recv_callback函数内不调用tcp_recved函数(不过数据要先读取,并记录字节数之后会用到),lwip会认为你没有拿走数据,所以就不会腾出接收窗口。当你想继续接收时,你在poll_callback(通过tcp_poll注册的回调函数)里再调用tcp_recved即可,这时lwip会腾出接收窗口,于是后续数据会继续流入。
zxq6
6楼-- · 2020-01-08 10:31
love_ourdev 发表于 2019-4-20 17:23
我刚才看了看自己以前的代码,找到了肯定有效的方法。就是在recv_callback函数内不调用tcp_recved函数(不 ...

感谢。
要的就是这种方法。
另外,请问一下,tcp_recved,在主循环里面,需要的时候调用是否可以?
还是必须要在那个回调函数里面来进行调用?

一周热门 更多>