日期:2014-05-20  浏览次数:21030 次

JAVA怎么实现下载上传限速
假设现在有一个P2P系统的一个主机A,正在从另外两个主机B和C下载同一个文件的不同块,那怎么在主机A上限制它的下载速度呢?同时B和C的上传速度又怎么限制呢?
PS 就像迅雷下载一样能把上传和下载速度控制到一个固定值

跪求大神解答!!!
------解决方案--------------------
数据来了,你只要不从InputStream里面读取就限速了啊,缓冲区满了,对方就发不动了。

如果要精确限速,就是根据时间间隔从InputStream读取数据。比如你的每次读取都是 byte[1024] 也就是1KB,如果要控制上传速度是 10KB/s,那么粗略点的控制方式就是每隔100ms读取一次1KB。
------解决方案--------------------
不太同意LS的看法,在客户端塞满缓冲区的话可能会导致数据包被丢弃的,下载限速还是要在PEER端来控制,你客户端要通知和你连接的PEER控制发出的流量,就像TCP里的窗口算法一样有一个协商的过程
------解决方案--------------------
限速客户端服务器端都可以做。你可以控制服务器带宽,或者限制输出流。客服端反之