这里只是说明多线程下载的理论基础,嘿嘿,并没有写多线程下载的代码,标题党了,但是我相信,看完这个代码就应该能够多线程的方式去下载一个文件了.

多线程下载是需要服务器支持的,这里并没有判断服务器不支持的情况.

其原理

在发送 http 请求时标记头文件,告诉服务器我需要这个文件的 第几个字节 到 第几个字节.如果服务器不支持让你分段取文件,可以想想看服务器会怎么做. 没错,他把整个文件给你了.

一定得判断 服务器不支持 的情况.

public void Worker()
{
string url = "http://files.cnblogs.com/cnryb/HttpSer.zip";
string path = "a.zip"; using (FileStream fs = new FileStream(
path,
FileMode.OpenOrCreate,
FileAccess.Write,
FileShare.Read,
2048,
FileOptions.RandomAccess
))
{
//先下载文件的第100个字节到最后
fs.Seek(100, SeekOrigin.Begin);
Down(fs, url, 100); //下载前100个字节
fs.Seek(0, SeekOrigin.Begin);
Down(fs, url, 0, 99);
}
}

 

public void Down(FileStream fs, string url, int start, int end = -1)
{
HttpWebRequest hwr = WebRequest.Create(url) as HttpWebRequest;
if (end == -1)
hwr.AddRange(start);
else
hwr.AddRange(start, end);
HttpWebResponse resp = hwr.GetResponse() as HttpWebResponse;
using (Stream input = resp.GetResponseStream())
{
byte[] bs = new byte[2048];
int count;
while ((count = input.Read(bs, 0, bs.Length)) != 0)
{
fs.Write(bs, 0, count);
}
}
}

最新文章

  1. Java并发编程:并发容器之ConcurrentHashMap(转载)
  2. ThinkPHP整合支付宝担保交易
  3. Sublime Text3
  4. 分享个新浪下载图片的ProgressBar进度样式
  5. 《Cortex-M0权威指南》之体系结构---程序映像和启动流程
  6. 初次使用nodejs的问题
  7. Bit Map解析
  8. 关于java sort的几种实现方式(单纯排序,按照bean的某一个字段,按照bean的多个字段)
  9. jquery简易版xwPop.js弹出消息对话框插件
  10. BZOJ1095:[ZJOI2007]Hide 捉迷藏(动态点分治)
  11. windows下python虚拟环境virtualenv安装和使用
  12. springboot:session集中存储到redis
  13. kettle的下载、安装和初步使用(windows平台下)(图文详解)
  14. bzoj 4084 双旋转字符串
  15. linux mv命令详解
  16. TCP 协议连接与关闭的握手
  17. Hadoop源码阅读-HDFS-day2
  18. hybrid app 知识点
  19. 高并发大容量NoSQL解决方案探索
  20. 虚拟机NAT网络设置

热门文章

  1. 通过物理模型生成Java代码
  2. XSS 复合编码 续
  3. bnuoj 31796 键盘上的蚂蚁(搜索模拟)
  4. 1030: [JSOI2007]文本生成器 - BZOJ
  5. js key事件 keyCode大全
  6. 利用钩子函数来捕捉键盘响应的windows应用程序
  7. 一个只需要点 「下一步」就完成监控 Windows
  8. OneAPM 云监控部署与试用体验
  9. C++开源跨平台类库集
  10. POJ3122Pie(二分)