OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 12419|回复: 10

LWIP 使用tcp_write()和tcp_output向外发送数据时,不能高频率向外发送数据?

[复制链接]

5

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2014-9-5
在线时间
9 小时
发表于 2018-3-29 10:26:11 | 显示全部楼层 |阅读模式
10金钱
协议栈移植的LWIP 1.4.1 ,TCP Client。在使用过程中发现,不管在应用程序里面以多大的频率来调用tcp_write() 和 tcp_output来实现数据的发送,接收到的数据总是将几帧数据打包在一起发送出来,发送的频率还比较稳定为200ms左右。tcp_write是将数据写入缓存,tcp_output不就将数据直接发送出来了吗?为什么会出现几帧打包在一起再发送的情况呢?请教各位路过的大神,这个是什么原因呢?

应该不是需要将缓存写到一定数量再发送,感觉就是周期性的发送,会不会是轮训或者其他周期性的执行,对LWIP的内核不是很理解,因此请教各位大神,谢谢!

最佳答案

查看完整内容[请看2#楼]

原子哥大神!!!!这个的问题应该找到了,是LWIP内部的Nagle算法会把一些小帧数据合并成一个大的数据包再往外发送,Nagle算法的周期一般是200ms,我尝试把这个算法关闭后,抓包工具抓到的数据看就正常了。。。。 结贴。。。。。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2014-9-5
在线时间
9 小时
 楼主| 发表于 2018-3-29 10:26:12 | 显示全部楼层

原子哥大神!!!!这个的问题应该找到了,是LWIP内部的Nagle算法会把一些小帧数据合并成一个大的数据包再往外发送,Nagle算法的周期一般是200ms,我尝试把这个算法关闭后,抓包工具抓到的数据看就正常了。。。。

结贴。。。。。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-3-31 02:30:31 | 显示全部楼层
帮顶
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2019-12-10
在线时间
2 小时
发表于 2019-12-11 09:34:58 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

2

主题

17

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2016-1-15
在线时间
12 小时
发表于 2020-1-6 14:49:20 | 显示全部楼层
hswkcg 发表于 2018-3-29 10:26
原子哥大神!!!!这个的问题应该找到了,是LWIP内部的Nagle算法会把一些小帧数据合并成一个大的数据包 ...

谢谢分享!
回复

使用道具 举报

1

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2019-10-29
在线时间
37 小时
发表于 2020-3-29 19:15:53 | 显示全部楼层
hswkcg 发表于 2018-3-29 10:26
原子哥大神!!!!这个的问题应该找到了,是LWIP内部的Nagle算法会把一些小帧数据合并成一个大的数据包 ...

怎么禁用
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2020-2-28
在线时间
2 小时
发表于 2020-4-7 19:49:49 | 显示全部楼层

感谢楼主,同样遇到了这个问题,按楼主方法解决。
在回调函数tcp_connected_callback()中,加入tcp_nagle_disable(connected_pcb);

哈哈,还发错帖子了,去了楼上的帖子
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2020-2-28
在线时间
2 小时
发表于 2020-4-7 19:50:22 | 显示全部楼层

看你楼下
回复

使用道具 举报

22

主题

108

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
429
金钱
429
注册时间
2016-5-23
在线时间
118 小时
发表于 2020-7-9 09:23:36 | 显示全部楼层

我的工程里怎么找不到 tcp_connected_callback 这个函数啊?
回复

使用道具 举报

22

主题

108

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
429
金钱
429
注册时间
2016-5-23
在线时间
118 小时
发表于 2020-7-9 10:25:56 | 显示全部楼层
lsw0135 发表于 2020-4-7 19:49
感谢楼主,同样遇到了这个问题,按楼主方法解决。
在回调函数tcp_connected_callback()中,加入tcp_na ...

程序中搜索了,没有找到tcp_connected_callback这个函数怎么办啊?
下载了lwip-2.1.2也没有tcp_connected_callback这个函数
回复

使用道具 举报

4

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2017-4-24
在线时间
44 小时
发表于 2020-8-31 15:54:32 | 显示全部楼层
请问如果我是接收端,我收到数据后,马上处理,但是我发现我收到的数据也是几个包合在一起,因为我的包比较小,发送频率比较高,可以在接收端进行同样的NO_DELAY设置,从而使接收到的数据不要连在一起吗?TCP协议
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 14:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表