困扰了我很多天的问题,在线等,今天一定要解决。谢谢大家!
string strResultSystem.Text.Encoding encoding = System.Text.Encoding.GetEncoding("UTF-8");
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.Method = "GET";
webRequest.UserAgent = "Opera/9.25 (Windows NT 6.0; U; en)";
HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
using (System.IO.Stream stream = webResponse.GetResponseStream())
{
using (System.IO.StreamReader reader = new StreamReader(stream, encoding))
{
strResult = reader.ReadToEnd();
}
}
webResponse.Close();
循环执行这段代码的时候 会出现 strResult = reader.ReadToEnd(); 这段代码提示《操作已超时。》
谁能告诉我下怎么改
--------------------编程问答-------------------- 网络流文件最好不要用reader.ReadToEnd(),因为网络上读取数据速度慢,还不可靠,读取不完数据是正常的,你需要处理读取不完的情况,
最好是分多次读取,每次读取一部分数据然后放到缓冲区,读取完之后Sleep一段时间,如果读取不完,做异常处理, --------------------编程问答-------------------- HttpWebResponse HttpWebRequest 是这两个超时 和 ReadToend 没关系吧??? --------------------编程问答-------------------- 当然有关系,下面这句话把服务器的HTTP应答当做一个流来处理,你readtoend实际上是想一次性把服务器返回的应答文本都读取到字符串中,
System.IO.Stream stream = webResponse.GetResponseStream()
readtoend的时候其实是在通过tcp/ip协议从网络上读取数据,如果网络速度慢或者不通畅,就会超时, --------------------编程问答--------------------
++
学习了 --------------------编程问答-------------------- 代码没有错
超时是无法取得所要的资料,这都是正常的
个人建议,把你的循环包在一个 try catch 裹
如果发生超时的行为,就忽略,等待下一个 loop 再执行
应该是这样子吧~
补充:.NET技术 , C#