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

heartdevil heartdevil 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我写了一个断点续传的下载程序。在大部分机器上运行的时候,没有任何问题。但在部分机器上,报了如下错误:
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后,程序会报错误?如果您碰到过类似的问题,请告诉我如何解决这个问题?
...全文

相关推荐

评论 6
收藏 已收藏
分享
返回顶部
heartdevil
C# 111,128 成员 642,536 内容