HttpWebResponse流停止从url获取数据

时间:2016-11-19 15:04:46

标签: c# download httpwebrequest

我正在使用MultiThreadedDownloader。程序使用不同的部分内容下载内容。

使用低速连接时,其中一些部分请求有时会突然停止获取数据,即使下载了所有部分,它们也无法取得进展。我无法理解这个问题的原因。

  

获取回复的代码

        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
            | SecurityProtocolType.Tls11
            | SecurityProtocolType.Tls12
            | SecurityProtocolType.Ssl3;
        ServicePointManager.Expect100Continue = true;

        HttpWebRequest req = WebRequest.Create(url) as HttpWebRequest;
        req.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)";
        req.AllowAutoRedirect = true;
        req.ServicePoint.ConnectionLimit = 100;
        req.ServicePoint.Expect100Continue = true;
        req.UseDefaultCredentials = true;
        req.KeepAlive = false;
        req.Timeout = 5000;
        req.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.GZip;
        req.ProtocolVersion = HttpVersion.Version10;

        HttpWebResponse resp = req.GetResponse() as HttpWebResponse;
        Stream tempStream = resp.GetResponseStream();

        while ((bytesRead = tempStream.Read(buffer, 0, buffer.Length)) > 0)
        {
            file.Write(buffer, 0, bytesRead);
            totalBytesRead += bytesRead;
        }
        file.Close();
        resp.Close();
        tempStream.Close();
        req.Abort();

响应不会引发异常。下载稍微进步后,部分下载停止了进展。其中一些是成功下载的,其中一些不是。

  

问题图片

enter image description here

如您所见,下载进度基本完成。但由于下载问题,它不能100%。下面进度条上的白色部分就是我所说的。

这个问题可能是什么原因?

更新

我已经发现问题只是连接速度低。可以同时下载多个连接,这使得每个部分下载的连接速度更低。

HttpWebResponse.GetResponseStream方法无法从源获取足够的字节并等待该代码行。有时Stream.Read会引发UnexpectedEndOfStream错误,有时bytesRead会返回 0 ,即使它不应该是。

那么我该如何解决这个问题呢?

0 个答案:

没有答案