.net如何开发限速下载的客户端

zyip 2009-02-11 09:59:20
像bt 迅雷这样的软件在下载的时候可以指定每秒最大多少k怎么实现的阿
.net如何实现
c/c++实现也行
...全文
918 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyc_piaoling 2011-06-24
  • 打赏
  • 举报
回复
我也要做这类的。可惜都找不到。希望能学习下
mbtw_1984 2009-03-20
  • 打赏
  • 举报
回复
没这么简单的,大家要认真回答,不能浪费别个的感情
浪子-无悔 2009-02-18
  • 打赏
  • 举报
回复
呵呵,我ye没做过!友情帮顶..顺便学习。。
jin20000 2009-02-18
  • 打赏
  • 举报
回复
LS的都说的没错了啊,就是流读取限制一下就OK了
wangping_li 2009-02-18
  • 打赏
  • 举报
回复
主要是FileStream类.找到一个示例,可以参考


// 输入参数:
// _Request: Page.Request对象
// _Response: Page.Response对象
// _fileName: 下载文件名
// _fullPath: 带文件名下载路径
// _speed 每秒允许下载的字节数
public static bool ResponseFile(HttpRequest _Request, HttpResponse _Response, string _fileName, string _fullPath, long _speed)
{
try
{
FileStream myFile = new FileStream(_fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
BinaryReader br = new BinaryReader(myFile);
try
{
_Response.AddHeader("Accept-Ranges", "bytes");
_Response.Buffer = false;
long fileLength = myFile.Length;
long startBytes = 0;

int pack = 10240; //10K bytes
//int sleep = 200; //每秒5次 即5*10K bytes每秒
int sleep = (int)Math.Floor(1000 * pack / _speed) + 1;
if (_Request.Headers["Range"] != null)
{
_Response.StatusCode = 206;
string[] range = _Request.Headers["Range"].Split(new char[] { '=', '-' });
startBytes = Convert.ToInt64(range[1]);
}
_Response.AddHeader("Content-Length", (fileLength - startBytes).ToString());
if (startBytes != 0)
{
_Response.AddHeader("Content-Range", string.Format(" bytes {0}-{1}/{2}", startBytes, fileLength - 1, fileLength));
}
_Response.AddHeader("Connection", "Keep-Alive");
_Response.ContentType = "application/octet-stream";
_Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(_fileName, System.Text.Encoding.UTF8));

br.BaseStream.Seek(startBytes, SeekOrigin.Begin);
int maxCount = (int)Math.Floor((fileLength - startBytes) / pack) + 1;

for (int i = 0; i < maxCount; i++)
{
if (_Response.IsClientConnected)
{
_Response.BinaryWrite(br.ReadBytes(pack));
Thread.Sleep(sleep);
}
else
{
i = maxCount;
}
}
}
catch
{
return false;
}
finally
{
br.Close();
myFile.Close();
}
}
catch
{
return false;
}
return true;
}

调用示例:
Page.Response.Clear();
bool success = ResponseFile(Page.Request, Page.Response, "filename", @"C:\download.date", 1024000);
if(!success)
Response.Write("下载文件出错!");
Page.Response.End();
liucuiqiang 2009-02-18
  • 打赏
  • 举报
回复
如迅雷等下载工具一样,想有限速功能,我也求.顶起来
hywyjw 2009-02-18
  • 打赏
  • 举报
回复
限速呀, 通过防火墙设一下不就行了, 还一定要程序来实现呀
消失的尘芥 2009-02-18
  • 打赏
  • 举报
回复
呵呵,我没做过!友情帮顶
xu_2007 2009-02-18
  • 打赏
  • 举报
回复
写一个计算每秒时间的函数,然后通过这个函数判断每秒发送了多少字节的数据,如果超过了你设置的数据就暂停一下!
卧_槽 2009-02-18
  • 打赏
  • 举报
回复
因为你的问题太傻,你又不好意思直接求代码,就没人理你咯。
zyip 2009-02-18
  • 打赏
  • 举报
回复
感觉我这一百分白仍了
怎么就没几个人回答呢
zyip 2009-02-12
  • 打赏
  • 举报
回复
卧_槽 2009-02-11
  • 打赏
  • 举报
回复
这个问题比较简单,asp都能实现的。

参看msdn 中system.io命名空间帮助
Fibona 2009-02-11
  • 打赏
  • 举报
回复
控制读文件的流就行了
cancerser 2009-02-11
  • 打赏
  • 举报
回复
不知道楼主会不会用客户端下载呢?
如果你会的话就简单很多了

下载肯定要有个流吧,有流就能控制流了吧。恩,慢点read应该不难。
zyip 2009-02-11
  • 打赏
  • 举报
回复
楼上能否具体一点

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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