那位哥哥能告诉我以下代码什么地方有错误?帮忙看看吧,没几行。

DataBind 2005-02-25 10:11:24
我用以下代码下载一个GB2312的网页,可是经常下载到一半左右或者是快要完成的时候就自动的结束了。表面上看是下载结束了,而且没有异常发生,就像是http流结束了。可是看文件就知道,不完整。
为什么呢?
我用的测试网页是http://news.sina.com.cn/old1000/news1000_20050204.shtml,这个网页大约有2M左右。

public static int BUFFER_SIZE = 32768;
public static string GetURLContentString(string url)
{
//StringBuilder buffer = new StringBuilder();
byte[] buffer = null;
try
{

HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);

httpWebRequest.KeepAlive = false;

HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();

Stream streamResponse=httpWebResponse.GetResponseStream();
BinaryReader binaryReader = new BinaryReader(streamResponse);

buffer = null;

byte[] blockBuffer = binaryReader.ReadBytes(BUFFER_SIZE);
while (blockBuffer.Length > 0)
{

if(buffer == null)
{
buffer = new byte[blockBuffer.Length];
blockBuffer.CopyTo(buffer,0);
}
else
{
byte[] bufferTmp = new byte[blockBuffer.Length + buffer.Length];
buffer.CopyTo(bufferTmp,0);
Array.Copy(blockBuffer,0,bufferTmp,buffer.Length - 1, blockBuffer.Length);
buffer = bufferTmp;
}
if(blockBuffer.Length < BUFFER_SIZE)
break;
blockBuffer = binaryReader.ReadBytes(BUFFER_SIZE);
}
binaryReader.Close();

streamResponse.Close();

httpWebResponse.Close();

return Encoding.GetEncoding("GB2312").GetString(buffer, 0, buffer.Length);

}
catch(ArgumentException e)
{
Console.WriteLine("\nThe second HttpWebRequest object has raised an Argument Exception as 'Connection' Property is set to 'Close'");
Console.WriteLine("\n{0}",e.Message);
}
catch(WebException e)
{
Console.WriteLine("WebException raised!");
Console.WriteLine("\n{0}",e.Message);
Console.WriteLine("\n{0}",e.Status);
}
catch(Exception e)
{
Console.WriteLine("Exception raised!");
Console.WriteLine("Source :{0} " , e.Source);
Console.WriteLine("Message :{0} " , e.Message);
}

return buffer.ToString();
}
...全文
271 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
sutalon 2005-02-25
  • 打赏
  • 举报
回复
mark
fellowcheng 2005-02-25
  • 打赏
  • 举报
回复
amendajing 2005-02-25
  • 打赏
  • 举报
回复
mark
ywxpeter 2005-02-25
  • 打赏
  • 举报
回复
数组的声明有问题,再加一个声明语句buffer=new byte[32768]
DataBind 2005-02-25
  • 打赏
  • 举报
回复
高人阿,你在哪啊!
DataBind 2005-02-25
  • 打赏
  • 举报
回复
怎么大家都那么多三角哦!我就两个!呜呜!
一天不学习,赶不上刘少奇。
lonelydreamsym 2005-02-25
  • 打赏
  • 举报
回复
up,jf
心情解码 2005-02-25
  • 打赏
  • 举报
回复
:)







--
yizhixiaozhu 2005-02-25
  • 打赏
  • 举报
回复
还没下载完 休息一下
等下接着下
你别急^_^
zhouyong2052 2005-02-25
  • 打赏
  • 举报
回复
up
web_gus 2005-02-25
  • 打赏
  • 举报
回复
up
DataBind 2005-02-25
  • 打赏
  • 举报
回复
32768是每次读的大小阿,我用的是adsl,这个大小差不多了吧?
这个值设大了,也是会下不全,性能可以后考虑,主要是为什么不能下在完全。
caiyajun512 2005-02-25
  • 打赏
  • 举报
回复
32768小了
mobydick 2005-02-25
  • 打赏
  • 举报
回复
使用WebClient试一下。
具体方法和属性查一下MSDN。
DataBind 2005-02-25
  • 打赏
  • 举报
回复
我的文件可以很大的,每次都读BUFFER_SIZE,如果读满了,说明还没读到尾,否则说明读完了,流结束了。
jialiang 2005-02-25
  • 打赏
  • 举报
回复
你的文件一定小于BUFFER_SIZE = 32768吗?
DataBind 2005-02-25
  • 打赏
  • 举报
回复
咋就没有人回呢,真那么难吗?
DataBind 2005-02-25
  • 打赏
  • 举报
回复
我失望!
DataBind 2005-02-25
  • 打赏
  • 举报
回复
怎么没有朋友肯试一下啊
DataBind 2005-02-25
  • 打赏
  • 举报
回复
数组没有问题。到底是那里的问题啊。

110,538

社区成员

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

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

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