Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何实现文件下载程序来检测通信中断?_C#_.net_Download - Fatal编程技术网

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

C# 如何实现文件下载程序来检测通信中断?,c#,.net,download,C#,.net,Download,我需要在C#中实现一个文件下载程序。此下载程序将在客户端计算机上运行,并将根据多种条件下载多个文件 我的主要限制是,客户端可能会在下载过程中脱机(有时会不止一次),因此我需要发生以下情况: 1) Downloader应该注意到不再有任何网络通信,并暂停下载 2) 一旦通信恢复,Downloader应恢复下载,并继续收集软件包,将其添加到已下载到本地磁盘的软件包中 我查看了StackOverflow之前的文章,发现有两个选项–WebClient和WebRequest(使用一个继承类)。我想知道是否

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

我的主要限制是,客户端可能会在下载过程中脱机(有时会不止一次),因此我需要发生以下情况:

1) Downloader应该注意到不再有任何网络通信,并暂停下载

2) 一旦通信恢复,Downloader应恢复下载,并继续收集软件包,将其添加到已下载到本地磁盘的软件包中


我查看了StackOverflow之前的文章,发现有两个选项–WebClient和WebRequest(使用一个继承类)。我想知道是否有人可以根据我指定的要求建议使用哪一种。如何检测通信中断?

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

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

您需要下载简历(如果您正在下载的服务器支持),这意味着您应该使用
WebRequest
,因为使用
WebClient
您无法做到这一点(可能下一个版本将支持范围请求)


一旦连接断开,正在读取网络流的代码就会抛出异常。这说明您的下载有问题(即网络问题),然后您可以在某些时段尝试创建新连接,如果成功,则从最后一个成功字节(使用HTTP头中的范围)恢复。

刚刚完成,谢谢。谢谢。请注意,不建议在帖子中使用标题中的感谢信/签名/标签。这可能是正确的答案。。。但到目前为止,OP似乎想要“如何检测通信中断”的信息(假设其他问题已经知道)…好吧,他有两个问题,我回答了第一个问题“根据需求建议使用哪一个”