我正在开发下载管理器项目 我正在使用:
public Stream GetStream(string url)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
return response.GetResponseStream();
}
然后将返回的流用作输入流,将FileStream用作while语句中的输出流:
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);
使用256kpps连接下载超过50MB的文件时 在大约20 - 30 MB之后,readSize变为0而没有错误
我的问题是: 是否有任何错误的Response对象,它被处置???? 或者问题是什么?
提前谢谢你, 如果我不能更好地解释,我很抱歉。
答案 0 :(得分: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,则需要write your own。