关于HttpWebRequest下载过程中网络连接断开的问题

qq5457237 2011-12-15 04:15:25
下载的方法:

/// <summary>
/// 下载文件
/// </summary>
/// <param name="url">文件路径</param>
/// <param name="startPos">起始位置</param>
/// <param name="bytesCount">读取字节数</param>
/// <returns></returns>
public byte[] DownLoadFile(string url, int startPos, int bytesCount)
{
ServicePointManager.DefaultConnectionLimit = 100;

System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(url);
request.KeepAlive = false;
request.AddRange(startPos, startPos + bytesCount - 1);
System.Net.WebResponse response =null ;

try
{
Console.WriteLine("请求数据");
response = request.GetResponse();
}
catch (WebException wex)
{
Console.WriteLine("请求数据WebException");
request.Abort();
throw wex;
}
catch (Exception ex)
{
Console.WriteLine("请求数据Exception");
request.Abort();
throw ex;
}


try
{
System.IO.Stream receiveStream = response.GetResponseStream();
System.IO.BinaryReader readStream = new System.IO.BinaryReader(receiveStream);
byte[] buffer = new byte[0];
byte[] read = new byte[256];
int count = readStream.Read(read, 0, 256);
while (count > 0)
{
Array.Resize<byte>(ref buffer, buffer.Length + count);
Array.Copy(read, 0, buffer, buffer.Length - count, count);
count = readStream.Read(read, 0, 256);
}
readStream.Close();
return buffer;
}
finally
{
response.Close();
}
}
}


调用下载方法的线程:

byte[] buffer = null;
//当服务器返回的数据长度不等于文件长度时,下载完成
while (startPos < FileSize)
{
string errorInfo = null;
try
{
buffer = HttpDownload.DownLoadFile(url, (int)startPos, blockSize);
returnSize = buffer.Length;
startPos += returnSize;
WriteToFile(buffer);
Percent = (int)Math.Floor(startPos * 100.0 / FileSize);
}
catch (WebException wex)
{
errorInfo = "连接失败";
Thread.Sleep(3000);
}
catch (Exception ex)
{
errorInfo = "连接失败";
Thread.Sleep(3000);
}
}


我设断点调试时测试断网,运行很正常。我不设断点,下载过程中断开网络连接,结果就没反应了,这是和解啊?相当苦闷。。。
...全文
464 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq5457237 2011-12-15
  • 打赏
  • 举报
回复
这什么乱七八糟的,我想问的是网络断开后,下载怎么没反应了,异常也捕获不到。
csdn_aspnet 2011-12-15
  • 打赏
  • 举报
回复
C# 代码
String url = "http://img04.taobaocdn.com/sns_album/i4/T1yAdWXgdGXXb1upjX.jpg";
String fileName = url.Substring(url.LastIndexOf("/") + 1);
String refer = url.Substring(0, url.LastIndexOf("/") + 1);
System.Net.HttpWebRequest req = System.Net.HttpWebRequest.Create(url) as System.Net.HttpWebRequest;
req.AllowAutoRedirect = true;
req.Referer = refer;
req.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13";
System.Net.HttpWebResponse res = req.GetResponse() as System.Net.HttpWebResponse;
System.IO.Stream stream = res.GetResponseStream();
byte[] buffer = new byte[32 * 1024];
int bytesProcessed = 0;
System.IO.FileStream fs = System.IO.File.Create(Server.MapPath(fileName));
int bytesRead;
do
{
bytesRead = stream.Read(buffer, 0, buffer.Length);
fs.Write(buffer, 0, bytesRead);
bytesProcessed += bytesRead;
}
while (bytesRead > 0);
fs.Flush();
fs.Close();
res.Close();

110,534

社区成员

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

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

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