C# 将GetResponseStream输出返回到另一个函数,respone如何处理

C# 将GetResponseStream输出返回到另一个函数,respone如何处理,c#,getresponsestream,C#,Getresponsestream,我正在做下载管理器项目 我用的是: public Stream GetStream(string url) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); return response.GetResponseStream(); } 然后在while语句

我正在做下载管理器项目 我用的是:

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);
使用256kps连接下载超过50MB的文件时 在大约20-30 MB之后,readSize将变为0而不会出现错误

我的问题是: 响应对象是否有任何问题,是否已处理???? 或者问题出在哪里

提前谢谢大家,,
如果我不能更好地解释的话,我很抱歉。

您没有处理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
是.NET4.0中新增的。如果您使用的是.NET,那么您的问题中类似的内容是什么意思?这是您的代码还是您正在运行的代码。如果您提供您正在使用的实际代码,您将需要发布实际代码,您给出的示例没有任何意义,那么提供帮助会更容易。为什么要尝试从响应流中读取?大家好,我编辑了我的帖子,所以我想现在已经很清楚了,因为@steve py:我认为回复流是用来阅读的;你的代码可以处理较小的文件吗?谢谢@Joe,但是你在一个地方完成了所有的工作,我的问题是在另一个函数中拆分请求和响应,并在第二个地方使用它返回的流。关于处理:我确实这样做了,所以我担心响应流与它自己的响应分离,因此流不能再读取了。