2

我正在研究下载管理器项目,我正在使用:

public Stream GetStream(string url)
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    return response.GetResponseStream();
}

然后在 while 语句中使用返回的流作为输入流和 FileStream 作为输出流:

Stream InputStream = GetStream("http://test_url/test.zip");
Stream OutputStream = new FileStream("d:\\test.zip", FileMode.Create, FileAccess.Write));
do
{
    readSize = InputStream.Read(buffer, 0, buffSize);
    OutputStream.Write(buffer, 0, (int)readSize);
}
while (readSize > 0);

在大约 20 - 30 MB 后使用我的 256kpps 连接下载超过 50 MB 的文件时,readSize 变为 0 而没有错误

我的问题是: Response 对象有什么问题吗,它被处理了吗????或者是什么问题?

提前谢谢你,如果我不能更好地解释,我很抱歉。

4

1 回答 1

2

您没有处理 HttpWebRequest / HttpWebResponse 对象,这可能会导致问题 - 对同一服务器的并发连接数存在内置限制。

您应该执行以下操作:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
using(HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
    using(Stream responseStream = response.GetResponseStream())
    {
        using(Stream outputStream = new FileStream(...))
        {
            responseStream.CopyTo(outputStream);
        }
    }
}

Stream.CopyTo是 .NET 4.0 中的新功能。如果您使用的是 .NET <= 3.x,则需要编写自己的.

于 2012-11-28T20:14:14.603 回答