frombegintoend原文HTTP断点续传下载的原理

要实现断点续传下载文件,首先要了解断点续传的原理。断点续传其实就是在上一次下载断开的位置开始继续下载,HTTP协议中,可以在请求报文头中加入Range段,来表示客户机希望从何处继续下载。

这是一个普通的下载请求:

  1. GET /test.txt HTTP/1.1
  2. Accept:*/*
  3. Referer:http://192.168.1.96
  4. Accept-Language:zh-cn
  5. Accept-Encoding:gzip,deflate
  6. User-Agent:Mozilla/4.0(compatible;MSIE 6.0;Windows NT 5.2;.NET CLR 2.0.50727)
  7. Host:192.168.1.96
  8. Connection:Keep-Alive

这表示从1024字节开始断点续传(加入了Range:bytes=1024-):

  1. GET /test.txt HTTP/1.1
  2. Accept:*/*
  3. Referer:http://192.168.1.96
  4. Accept-Language:zh-cn
  5. Accept-Encoding:gzip,deflate
  6. User-Agent:Mozilla/4.0(compatible;MSIE 6.0;Windows NT 5.2;.NET CLR 2.0.50727)
  7. Host:192.168.1.96
  8. Range:bytes=1024-
  9. Connection:Keep-Alive

C#主要代码:

  1. #region 以断点续传方式下载文件
  2.  
  3. /// <summary>
  4. /// 以断点续传方式下载文件
  5. /// </summary>
  6. /// <param name="strFileName">下载文件的保存路径</param>
  7. /// <param name="strUrl">文件下载地址</param>
  8. public void DownloadFile(string strFileName, string strUrl)
  9. {
  10. //打开上次下载的文件或新建文件
  11. long SPosition = 0;
  12. FileStream FStream;
  13. if (File.Exists(strFileName))
  14. {
  15. FStream = File.OpenWrite(strFileName);
  16. SPosition = FStream.Length;
  17. FStream.Seek(SPosition, SeekOrigin.Current);//移动文件流中的当前指针
  18. }
  19. else
  20. {
  21. FStream = new FileStream(strFileName, FileMode.Create);
  22. SPosition = 0;
  23. }
  24. try
  25. {
  26. HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(strUrl);
  27. if (SPosition > 0)
  28. myRequest.AddRange((int)SPosition);//设置Range值
  29. //向服务器请求,获得服务器的回应数据流
  30. Stream myStream = myRequest.GetResponse().GetResponseStream();
  31. byte[] btContent = new byte[512];
  32. int intSize = 0;
  33. intSize = myStream.Read(btContent, 0, 512);
  34. while (intSize > 0)
  35. {
  36. FStream.Write(btContent, 0, intSize);
  37. intSize = myStream.Read(btContent, 0, 512);
  38. }
  39. FStream.Close();
  40. myStream.Close();
  41. //文件下载完成
  42. }
  43. catch
  44. {
  45. FStream.Close();
  46. }
  47. }
  48.  
  49. #endregion

HTTP断点续传下载的原理的更多相关文章

  1. 实现android支持多线程断点续传下载器功能

    多线程断点下载流程图: 多线程断点续传下载原理介绍: 在下载的时候多个线程并发可以占用服务器端更多资源,从而加快下载速度手机端下载数据时难免会出现无信号断线.电量不足等情况,所以需要断点续传功能根据下 ...

  2. android 多线程断点续传下载

    今天跟大家一起分享下Android开发中比较难的一个环节,可能很多人看到这个标题就会感觉头很大,的确如果没有良好的编码能力和逻辑思维,这块是很难搞明白的,前面2次总结中已经为大家分享过有关技术的一些基 ...

  3. ASP.NET WebAPi之断点续传下载(下)

    前言 上一篇我们穿插了C#的内容,本篇我们继续来讲讲webapi中断点续传的其他情况以及利用webclient来实现断点续传,至此关于webapi断点续传下载以及上传内容都已经全部完结,一直嚷嚷着把S ...

  4. ASP.NET WebAPi之断点续传下载(上)

    前言 之前一直感觉断点续传比较神秘,于是想去一探究竟,不知从何入手,以为就写写逻辑就行,结果搜索一番,还得了解相关http协议知识,又花了许久功夫去看http协议中有关断点续传知识,有时候发觉东西只有 ...

  5. iOS开发之网络编程--4、NSURLSessionDataTask实现文件下载(离线断点续传下载) <进度值显示优化>

    前言:根据前篇<iOS开发之网络编程--2.NSURLSessionDownloadTask文件下载>或者<iOS开发之网络编程--3.NSURLSessionDataTask实现文 ...

  6. iOS开发之网络编程--3、NSURLSessionDataTask实现文件下载(离线断点续传下载)

    前言:使用NSURLSessionDownloadTask满足不这个需要离线断点续传的下载需求,所以这里就需要使用NSURLSessionDataTask的代理方法来处理下载大文件,并且实现离线断点续 ...

  7. iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载+使用输出流代替文件句柄

    前言:本篇讲解,在前篇iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载的基础上,使用输出流代替文件句柄实现大文件断点续传.    在实际开发中,输入输出流用的比较少,但 ...

  8. Android实现网络多线程断点续传下载(转)

    本示例介绍在Android平台下通过HTTP协议实现断点续传下载. 我们编写的是Andorid的HTTP协议多线程断点下载应用程序.直接使用单线程下载HTTP文件对我们来说是一件非常简单的事.那么,多 ...

  9. Android开发多线程断点续传下载器

    使用多线程断点续传下载器在下载的时候多个线程并发可以占用服务器端更多资源,从而加快下载速度,在下载过程中记录每个线程已拷贝数据的数量,如果下载中断,比如无信号断线.电量不足等情况下,这就需要使用到断点 ...

随机推荐

  1. Qt 4.8.5 jsoncpp lib

    Qt jsoncpp lib 一.参考文档: . QtCreator动态编译jsoncpp完美支持x86和arm平台 http://www.linuxidc.com/Linux/2012-02/536 ...

  2. python之List排序

    sorted() #coding:utf-8 #sorted Ascending 升序 L = [12,23,43,3,65,34,21,3645] print(sorted(L)) >> ...

  3. 【剑指offer】求1+2+…+n,C++实现

    原创博文,转载请注明出处! # 题目 # 思路 使用递归计算累加,利用逻辑与的短路特性终止递归.逻辑与的短路特性 : A&&B,A>0时,执行B:A=0时,不执行B. # 代码 ...

  4. [Linux]Ubuntu中的System Setting

    问题 使用Ubuntu的过程中,安装搜狗输入法,卸载了系统自带的ibus.输入法搞定后,发现System Setting没有了... 原因 因为在卸载ibus等软件时,会删除一些依赖包,删除过程可能会 ...

  5. postman简单使用

    postman百度网盘下载地址:https://pan.baidu.com/s/1nuO2CGT 下载压缩后 打开chrome输入chrome://extensions/ 把文件拖到浏览器中 启动po ...

  6. 携程 决赛 第一题 Crossword

    //真是郁闷的一晚上//比赛时看到这题是就感觉会做,感觉思路清晰 就去准备找第二题 ,因为感觉第二题是个经典问题,(我不会计算几何),就去搜索了下,然后找到求最小面积的,改来改去,一直Wa// 然后就 ...

  7. SQL夯实基础(九)MySQL联接查询算法

    书接上文<SQL夯实基础(八):联接运算符算法归类>. 这里先解释下EXPLAIN 结果中,第一行出现的表就是驱动表(Important!). 对驱动表可以直接排序,对非驱动表(的字段排序 ...

  8. Asp.net Global 定时执行

    在复杂的业务应用程序中,有时候会要求一个或者多个任务在一定的时间或者一定的时间间隔内计划进行,比如定时备份或同步数据库,定时发送电子邮件,定期处理用户状态信息,支付系统中定期同步异常账单等等,我们称之 ...

  9. Web应用程序开发知识点回顾

    asp.net 1.<%@ Page Language="C#"AutoEventWireup="true" CodeFile="Home.as ...

  10. MTK-shot mode

    enum EShotMode{    eShotMode_NormalShot,                           /*!< Normal Shot */    eShotMo ...