HTTP断点续传下载的原理

简介:

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

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

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

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

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

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

 C#主要代码:

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

 

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。

   本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/6147157.html ,如需转载请自行联系原作者

相关文章
|
1月前
|
网络协议 Linux
HTTP协议基本原理简介(二)
HTTP协议基本原理简介(二)
23 1
|
2月前
|
安全 应用服务中间件 网络安全
HTTPS 基础原理和配置 -2
HTTPS 基础原理和配置 -2
|
2月前
|
安全 应用服务中间件 网络安全
HTTPS 基础原理和配置 -3
HTTPS 基础原理和配置 -3
|
1月前
|
缓存 前端开发
HTTP协议基本原理简介(三)
HTTP协议基本原理简介(三)
15 1
|
14天前
|
安全 网络协议 网络安全
网络原理(5)--HTTPS是如何进行加密的
网络原理(5)--HTTPS是如何进行加密的
11 0
|
14天前
|
存储 JSON 前端开发
网络原理(4)HTTP协议(下)
网络原理(4)HTTP协议
26 0
|
1月前
|
运维 安全 Linux
CA认证与HTTPs原理介绍
CA认证与HTTPs原理介绍
28 2
|
1月前
|
缓存 网络协议
HTTP协议基本原理简介(一)
HTTP协议基本原理简介(一)
16 1
|
1月前
|
安全 网络协议 算法
是时候理解下HTTPS的原理及流程了
是时候理解下HTTPS的原理及流程了
23 0
|
1月前
|
安全 搜索推荐 数据安全/隐私保护
深入探讨HTTPS协议的原理和工作流程
【2月更文挑战第10天】
36 4
深入探讨HTTPS协议的原理和工作流程