在使用AddRange方法后,用Http进行下载的时候,出错。

heartdevil 2008-12-20 10:52:45
我写了一个断点续传的下载程序。在大部分机器上运行的时候,没有任何问题。但在部分机器上,报了如下错误:
The underlying connection was closed: An unexpected error occurred on a receive.
由于找不到原因,我写了如下测试程序:

程序一:使用WebClient方法进行下载
结论:一切正常
private void btnWebClient_Click(object sender, EventArgs e)
{
try
{
if (JudgeCanDownload())
{
WebClient client = new WebClient();
client.DownloadFile(txtDownLoadUrl.Text.Trim(), txtFileSavePath.Text.Trim() + "\\WebClient_Server.rar");
client.Dispose();
}
}
catch (Exception ex)
{
txtWebClient.Text = ex.Message;
}
}

程序二:程序二与三的唯一差别在于,二使用HttpWebRequest进行下载,并且不用AddRange方法
结论:一切正常
private void btnHttpDownload_Click(object sender, EventArgs e)
{
try
{
if (JudgeCanDownload())
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(txtDownLoadUrl.Text.Trim());
FileStream FileSaveStream = System.IO.File.OpenWrite(txtFileSavePath.Text.Trim() + "Http_Server.rar");
Stream ReadResponseStream = request.GetResponse().GetResponseStream();


byte[] nbytes = new byte[512];
int nReadSize = ReadResponseStream.Read(nbytes, 0, 512);
while (nReadSize > 0)
{
FileSaveStream.Write(nbytes, 0, nReadSize);
nReadSize = ReadResponseStream.Read(nbytes, 0, 512);
}

//下载完毕,关闭所有的流.
FileSaveStream.Close();
ReadResponseStream.Close();
request.GetResponse().Close();
}
}
catch (Exception ex)
{
txtHttpDownload.Text = ex.Message;
}
}

程序三:使用HttpWebRequest进行下载,并且使用了AddRange方法,从1000字节处开始请求。
结论:出现错误 The underlying connection was closed: An unexpected error occurred on a receive.
private void btnOtherDown_Click(object sender, EventArgs e)
{
try
{
if (JudgeCanDownload())
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(txtDownLoadUrl.Text.Trim());
//使用AddRange后,报错。
request.AddRange(1000); FileStream FileSaveStream = System.IO.File.OpenWrite(txtFileSavePath.Text.Trim() +

"Http1000_Server.rar");
Stream ReadResponseStream = request.GetResponse().GetResponseStream();


byte[] nbytes = new byte[512];
int nReadSize = ReadResponseStream.Read(nbytes, 0, 512);
while (nReadSize > 0)
{
FileSaveStream.Write(nbytes, 0, nReadSize);
nReadSize = ReadResponseStream.Read(nbytes, 0, 512);
}

//下载完毕,关闭所有的流.
FileSaveStream.Close();
ReadResponseStream.Close();
request.GetResponse().Close();
}
}
catch (WebException ex)
{
txtOtherDownload.Text = ex.Message + ex.Status;
}
}

结论:程序一与二运行没有问题,说明网络是正常的。服务器上的压缩包有1420KB,程序三的AddRange应该不会越界。并且程序三在大多数机

器上的运行是正常的,只在部分机器上出现问题。
请问:为什么使用了AddRange后,程序会报错误?如果您碰到过类似的问题,请告诉我如何解决这个问题?
...全文
185 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
heartdevil 2008-12-25
  • 打赏
  • 举报
回复
大家能帮帮我吗?
heartdevil 2008-12-22
  • 打赏
  • 举报
回复
flyjimi 谢谢你。
我连接的是一个压缩包。request.AddRange()方法,本身是没有问题的。因为同样的方法,在大多数机器上的运转正常。
wangping_li
改成request.AddRange(10)也不行。

请大家在帮我参考一下吧。
wangping_li 2008-12-22
  • 打赏
  • 举报
回复
你把 request.AddRange(1000)里的1000改为10试试看呢?
这样的会不会是连接超时了?
你连接数量太多的话,对方有可能把它列为非法链接而给你强制中断了
flyjimi 2008-12-21
  • 打赏
  • 举报
回复
我试了一下request.AddRange(),没有发现问题。我连的是网页。
heartdevil 2008-12-21
  • 打赏
  • 举报
回复
请大家帮我参考一下吧。
谢谢啦。
heartdevil 2008-12-21
  • 打赏
  • 举报
回复
请大家帮我参考一下吧。
谢谢啦。

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧