无法创建多个连接以在 c# 中下载文件



这是我的代码:

 public static Stream CreateLink(Uri path, int start, int end)
        {
            HttpWebResponse response;
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(path);
            request.Timeout = 30000;
            request.AddRange(start, end);
            try
            {
                response = (HttpWebResponse)request.GetResponse();
            }
            catch
            {
                response = null;
            }
            if (response != null)
            {
                var stream = response.GetResponseStream();
                return stream;
            }
            return null;
        }

我正在创建多个连接以从同一流并行下载数据。但是,它会返回流一次,并在所有后续尝试中返回 null,直到第一个返回的流关闭。
此外,Stream 支持Accept-Ranges作为bytes
所以,我的问题是我如何建立多个连接或上面的代码有问题?


更新:
由于超时异常,response设置为 null,或者在上一个连接(响应流)关闭之前没有收到任何响应。

.

NET Framework 4/4.5 具有内置的优化异步HttpClient类。您可以使用它们来实现几乎所有您想要从HTTP实现的目标。以下是您所需要的一切:

var responseMessage = await (new HttpClient().GetAsync("http://download.linnrecords.com/test/flac/recit24bit.aspx", HttpCompletionOption.ResponseHeadersRead));
if (responseMessage.StatusCode == System.Net.HttpStatusCode.OK)
{
    var filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "test_http_download.flac");
    using (var fileStream = File.Create(filePath))
    using (var httpStream = await responseMessage.Content.ReadAsStreamAsync())
    {
        httpStream.CopyTo(fileStream);
        fileStream.Flush();
    }
    Process.Start(filePath);
}

似乎大多数时候你不会得到 HttpWebRequest 的长度,这就是为什么在尝试运行代码时,你会遇到这样的异常:

This stream does not support seek operations.

和:

'debug.Position' threw an exception of type 'System.NotSupportedException'

查看此答案以获取更多详细信息:)

编辑:我不确定您如何调用代码以及从何处调用代码,但是如果您以正常的程序(串行)方式进行操作,例如:

for (int i =0; i<10; i++) {
  var some_var = CreateLink(path, i*100,(i+1)*100)
}
然后它

显然会调用该方法,等到它获得前 100(或你设置的任何)字节,然后再次调用它。

相关内容

  • 没有找到相关文章

最新更新