使用.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());

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓梦庄子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值