使用.NET实现断点续传

简介:

断点续传的原理
在了解HTTP断点续传的原理之前,先来说说HTTP协议,HTTP协议是一种基于tcp的简单协议,分为请求和回复两种。请求协议是由客户机(浏览器)向服务器(WEBSERVER)提交请求时发送报文的协议。回复协议是由服务器(webserver),向客户机(浏览器)回复报文时的协议。请求和回复协议都由头和体组成。头和体之间以一行空行为分隔。

以下是一个请求报文与相应的回复报文的例子:

GET/image/index_r4_c1.jpgHTTP/1.1

Accept:*/*

Referer:

Content-Length:2827

?JFIFHHC[1]

….

下面我们就来说说“断点续传”。

顾名思义,断点续传就是在上一次下载时断开的位置开始继续下载。在HTTP协议中,可以在请求报文头中加入Range段,来表示客户机希望从何处继续下载。

比如说从第1024字节开始下载,请求报文如下:

GET/image/index_r4_c1.jpgHTTP/1.1

Accept:*/*

Referer:

stringStrUrl="

//打开上次下载的文件或新建文件

longlStartPos=0;

System.IO.FileStreamfs;

if(System.IO.File.Exists(StrFileName))

{

fs=System.IO.File.OpenWrite(StrFileName);

lStartPos=fs.Length;

fs.Seek(lStartPos,System.IO.SeekOrigin.Current);//移动文件流中的当前指针

}

else

{

fs=newSystem.IO.FileStream(StrFileName,System.IO.FileMode.Create);

lStartPos=0;

}

//打开网络连接

try

{

System.Net.HttpWebRequestrequest=(System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(StrUrl);

if(lStartPos>0)

request.AddRange((int)lStartPos);//设置Range值

//向服务器请求,获得服务器回应数据流

System.IO.Streamns=request.GetResponse().GetResponseStream();

byte[]nbytes=newbyte[512];

intnReadSize=0;

nReadSize=ns.Read(nbytes,0,512);

while(nReadSize>0)

{

fs.Write(nbytes,0,nReadSize);

nReadSize=ns.Read(nbytes,0,512);

}

fs.Close();

ns.Close();

Console.WriteLine("下载完成");

}

catch(Exceptionex)

{

fs.Close();

Console.WriteLine("下载过程中出现错误:"+ex.ToString());

}

}

目录
相关文章
|
.NET API 开发框架
|
.NET 开发框架
ASP.NET用HttpListener实现文件断点续传
本文转载:http://www.cnblogs.com/TianFang/archive/2007/01/03/610739.html 断点续传的原理很简单,就是在Http的请求和应答的报文头上和一般的下载有所不同而已。
1570 0
|
C# 内存技术 .NET
FLASH+ASP.NET(C#)的断点续传(上传)解决方案
DEMO的下载地址: http://files.cnblogs.com/liulun/flashUploader.rar 参考文章所在地址: http://blog.l4cd.net/post-old-102.
905 0
|
3月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
41 0
|
1月前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
29 0