如何实现文件下载来检测通信中断?

时间:2013-05-14 01:50:38

标签: c# .net download

我需要在C#中实现一个文件下载器。此下载程序将在客户端计算机上运行,​​并将根据几个条件下载多个文件。

我的主要限制是客户端在下载期间可能会脱机(有时不止一次),所以我需要做以下事情:

1)下载者应该注意到没有任何网络通信并暂停下载。

2)下载程序应在通信恢复后继续下载,并继续收集程序包,将其添加到已下载到本地磁盘的程序包中。

我已经检查过StackOverflow以前的帖子,看到有两个选项 - WebClient和WebRequest(使用其中一个继承类)。我想知道是否有人可以根据我指定的要求建议使用哪一个。如何检测通信中断?

2 个答案:

答案 0 :(得分:0)

您需要 System.Net.HttpWebRequest 发送HTTP请求, System.IO.FileStream 才能访问文件。需要两种方法是 HttpWebRequest.AddRange Filestream.seek

HttpWebRequest.AddRange方法向请求添加字节范围标头,range参数指定范围的起始点。服务器将开始从指定的范围参数发送数据到HTTP实体中的数据末尾。而Filestream.seek方法用于访问流中的当前位置。

Source and example

答案 1 :(得分:0)

您需要下载简历(如果您正在下载的服务器支持),这意味着您应该使用WebRequest,因为WebClient您不能这样做(可能下一版本将支持RANGE请求)。< / p>

一旦连接断开,正在读取网络流的代码会抛出异常。这告诉您下载存在问题(即网络问题),然后您可以尝试在某些时段建立新连接,如果成功,则从上一个成功字节恢复(在HTTP HEADER中使用RANGE)。