关于控制TCP的传输速率问题

xysome 2006-08-07 05:22:19
现在在做这样一个系统,一边是以太网,另一边是电话拨号上网,以太网端的TCP连接以太网上的一个终端,电话拨号那边连接Internet上的一个终端,将以太网收到的TCP数据传到Internet上去。现在出现了一个问题,由于以太网端的TCP传输过快,而电话拨号端传输太慢,很快系统内存被耗尽。怎样能控制以太网端的TCP传输速度,使得它与电话拨号端匹配?用TCP的窗口机制能控制吗?具体如何实现?
...全文
545 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xysome 2006-08-18
  • 打赏
  • 举报
回复
主要是以太网上其他计算机是独立的,不能更改程序的,只有我这边去适应他们,所以无法实现同步。
netsys2 2006-08-15
  • 打赏
  • 举报
回复
你只有自己尝试,发送时加SLEEP延时,另外编写一个SERVER来测试接收速度,然后逐渐减少SLEEP的时间,直到满足你的要求。
xysome 2006-08-15
  • 打赏
  • 举报
回复
如果每一次发数据都等上一个send发送成功,那么发送就会非常缓慢了,应该不是这个机制吧
binglex 2006-08-11
  • 打赏
  • 举报
回复
看来lz在接收端进行了控制,还应该在发送端也进行控制把,确认上一个send成功之后再发送下边的数据,而不是一直发送。
UDX协议 2006-08-10
  • 打赏
  • 举报
回复
那可以用select模型。当可写的时候,再去写。
xysome 2006-08-09
  • 打赏
  • 举报
回复
我这是在嵌入式系统中做的,不是在Windows下编程
UDX协议 2006-08-08
  • 打赏
  • 举报
回复
你这种问题用overlay方案是最好的,当上次投递的发送完成之后再去发下一个包,这样就不会出现你的情况。如果需要我帮你解决,短信联系。
DentistryDoctor 2006-08-08
  • 打赏
  • 举报
回复
TCP是自己会控制快发慢收的问题的,是不是你自己在应用层缓存了过多的数据?
UDX协议 2006-08-08
  • 打赏
  • 举报
回复
The Windows Sockets WSAOVERLAPPED structure provides a communication medium between the initiation of an overlapped I/O operation and its subsequent completion

这个结构中有一个事件,你可以当发送完一个包的时候,接收到事件,从而你可以有序的,可控的发送。
xysome 2006-08-08
  • 打赏
  • 举报
回复
To:oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)
您的建议:TCP发送的时候放慢点。
这可没个准了,放慢到什么程度合适呢?这才是问题所在。

To:DentistryDoctor(牙医的目标是没有蛀牙)
您的建议:TCP是自己会控制快发慢收的问题的,是不是你自己在应用层缓存了过多的数据?
TCP可以控制,好像是用滑动窗口机制。在应用层(注意是嵌入式系统的),我是这样做的:只要系统内存低于警戒值,我就将TCP的滑动窗口调整至0,这样对方就知道我现在不能再接收数据了,实际上解决了流控问题。上述方法已实现,但问题是内存恢复的时候,TCP莫名其妙断开了,只得重新连接,这是什么原因?

To:wwwllg(野蛮人)
您的建议:你这种问题用overlay方案是最好的,当上次投递的发送完成之后再去发下一个包,这样就不会出现你的情况。如果需要我帮你解决,短信联系。
请问什么是Overlay?短信已发,请指教,谢谢!


oyljerry 2006-08-07
  • 打赏
  • 举报
回复
TCP发送的时候放慢点
Radar2006 2006-08-07
  • 打赏
  • 举报
回复
up

4,356

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧