如何控制文件传输的速率?(顶着有分)(有满意答案加分)

theendname 2009-01-13 06:32:03
简单的TCP文件传输,我怎么能控制自己的下载速率呢?socket实现。
...全文
593 51 打赏 收藏 转发到动态 举报
写回复
用AI写文章
51 条回复
切换为时间正序
请发表友善的回复…
发表回复
MoonAndWind 2009-04-07
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 yellowhwb 的回复:]
弄个timer,然后把下载的流量除以时间,得出速度,速度快了,就sleep一会儿,慢了就不sleep,不知道是否可行!
[/Quote]

感觉这个比较靠谱,难点应该在于这儿Sleep的频率
lovejklife 2009-01-22
  • 打赏
  • 举报
回复
不管是客户端还是服务器,只要任何一侧做控制,传输速率就下来了

你们说我说的对不对
lovejklife 2009-01-22
  • 打赏
  • 举报
回复
减小传输速率,还不好弄?人家都考虑加速

不管是客户端还是服务器,只要在send的循环里加上sleep就可以了呀,
sleep的时间可以根据发送的速率来调整。发送慢了接收测自然也就慢了。
同理
在recv的循环里加上sleep,sleep的时间可以根据recv的速率来调整。
接收慢了如果接收缓存满了发送端会减小发送窗口减低发送速度。
mycheche 2009-01-21
  • 打赏
  • 举报
回复
不懂,帮D
gaoshang212 2009-01-21
  • 打赏
  • 举报
回复
顶!
vbcpascal 2009-01-21
  • 打赏
  • 举报
回复
xuxingok 2009-01-20
  • 打赏
  • 举报
回复
up
nullah 2009-01-20
  • 打赏
  • 举报
回复
我是来顶的~~
tanmeining 2009-01-20
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 theendname 的回复:]

......

貌似客户端与服务器协商来进行带宽控制是个好方法(再次庆幸,我们是个coder)。
[/Quote]
这你得重写服务器和客户端,工作量太大了吧?
同时,传送的结构体,是否可以压缩?结构体小了,一次性发送的数据包是否也意味着小了?换句话说也就是所占用带宽是否也就小了?我也不太清楚,希望前辈们详细解释下。。。
theendname 2009-01-20
  • 打赏
  • 举报
回复
150分啊,咋没人了呢!!
theendname 2009-01-20
  • 打赏
  • 举报
回复
[Quote=引用 41 楼 tanmeining 的回复:]
引用 35 楼 theendname 的回复:

......

貌似客户端与服务器协商来进行带宽控制是个好方法(再次庆幸,我们是个coder)。

这你得重写服务器和客户端,工作量太大了吧?
同时,传送的结构体,是否可以压缩?结构体小了,一次性发送的数据包是否也意味着小了?换句话说也就是所占用带宽是否也就小了?我也不太清楚,希望前辈们详细解释下。。。
[/Quote]
本来就是个新的功能点,当然要全部重写;至于压缩传输,正在考虑中。
我这里问的是对带宽的控制问题; 用于在内网传输,速度太快,如果不加以限制,可能造成资源占用过高,影响客户机的功能,所以想根据客户机的动态功能形成一个公式,来计算传输的最佳流量,并实现控制,而且要尽量减少数据报的丢弃,减少内网带宽的占用!
kikikind 2009-01-20
  • 打赏
  • 举报
回复
我想对于TCP来说,连接了接收数据速度只能按网络的状态来确定了~~~~ 加大recv缓冲慢慢读,或都是减少recv缓冲等重传,对底层来说还是没有帮助呢,可以试一下QOS相关的socket设置~~~
theendname 2009-01-16
  • 打赏
  • 举报
回复
我是LZ,感谢大家帮忙。
1. 用setsockopt,设置socket的接收缓冲,弄成最小
设置接收缓冲区大小,只是控制了socket底层收发的缓冲,如果我的recv够快的话对带宽控制没什么作用。
2. 定时读取一点点,让socket的buffer一直满的,这样对方就写不过来了
其实这是方法之一,这种方法其实是利用了TCP传输的可靠性,当接收不正确,或被丢包后,重发。实际上了加大了链路包的发送。
3.我看了电驴的源码(再次感谢hydra1101 前辈的帮助),它是用设定recv缓冲区长度的方法来控制接收速度的,但他是怎样来调节数据报大小的,以防止数据报发生错误?

想到的:减少recv速度,可以沾满recv缓冲,那么send缓冲也可能就沾满了,这样send发送就会回WSAEMSGSIZE(应该是这个),需要服务重新发送,服务压力没有得到减小。

貌似客户端与服务器协商来进行带宽控制是个好方法(再次庆幸,我们是个coder)。

我抛砖引玉啦,大家再接再厉。
icesky_ff 2009-01-16
  • 打赏
  • 举报
回复
up
qqxiaoyatou 2009-01-16
  • 打赏
  • 举报
回复
学习up
zhyl0219 2009-01-16
  • 打赏
  • 举报
回复
UP
theendname 2009-01-16
  • 打赏
  • 举报
回复
ZhengZhiRen 2009-01-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 hydra1101 的回复:]
居然有人顶这个臭诸葛,人家是想控制带宽,你倒好,不但不省带宽还去丢数据。
[/Quote]
呵呵
vanta 2009-01-15
  • 打赏
  • 举报
回复
知道理论,没有实践过,看来需要继续学习
bingbingzhe 2009-01-15
  • 打赏
  • 举报
回复
窗口,,,窗口。。窗口
窗口,,,窗口。。窗口窗口,,,窗口。。窗口

可是设置窗口大小的吧,
加载更多回复(31)

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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