请教用StreamReader读取网络数据时的问题

icom99 2009-01-10 12:00:05
写了一个程序,使用StreamReader读取网络数据,只要向网址指定的地址发送一个HTTP请问,则可以一直收到数据,就象股票数据那样,隔一定时间就会发送一批数据过来。
但是有两个问题:
1.当一次有大量数据时会抛出异常
2.当网络中断时没有抛出异常

代码如下:
string requestURLString = "连接的URL";
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestURLString);

StringBuilder sb = new StringBuilder();
string s;
request.Method = "GET";
//向指定网址发送请求
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.ASCII);
int bytesread = 0;

bytesread = sr.Read(buffer, 0, bufferSiz);
#if DEBUG
log.Debug(requestURLString);
log.Debug("成功发送请求");
#endif

state = SERVERSTATE.WORKING;
//开始不中断的读取网络中发来的数据
while (bytesread > 0)
{
s = new string(buffer, 0, bytesread);

SendRealTimeData(s);
//1.当一次有大量数据时会抛出异常
//以下读句在网络对方一次性发送少量数据时,没问题,
//但如果网络对端一次性发送很大量的数据时,将抛出异常,即使数据长度小于bufferSiz,
bytesread = sr.Read(buffer, 0, bufferSiz);
}
sr.Close();

state = SERVERSTATE.LOGOFF;
if (ServerStopedEvent != null)
{
ServerStopedEvent();
}
return;

}
//2.当网络中断时没有抛出异常
catch (Exception exp)//捕获异常,如果网络出的异常,则进行异常处理,但网络中断后,调试没发现捕获到异常,为什么?
{
log.Error(exp.Message);

if (ServerStopedEvent != null)
{
ServerStopedEvent();
}
state = SERVERSTATE.LOGOFF;
return;
}

请问如何解决以上2问题?
或者有什么更好的办法能“向网址指定的地址发送一个HTTP请问,则可以一直收到数据,就象股票数据那样,隔一定时间就会发送一批数据过来”,但同时能监控何时连接有问题(一旦有问题就会抛出异常,捕获异常后才能进行必须的对应处理),但又能一次接收很大数量的数据?
...全文
209 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
salarinaaaa 2012-02-26
  • 打赏
  • 举报
回复
表示大数据时也报错了。。。还在找解决的办法。
icom99 2009-02-03
  • 打赏
  • 举报
回复
?
icom99 2009-01-17
  • 打赏
  • 举报
回复
to javakiki
1.当一次有大量数据时会抛出异常
=========================
采用多线程来处理大量数据

我的这个线程就是专门用来进行数据处理的,而且只和服务器进行专门的数据交换,只是服务器有时在一个数据包中发送了大量的数据过来, SendRealTimeData(s); 中也是启用了新的线程去处理从服务器接收到的数据。

2.当网络中断时没有抛出异常
====================
网络中断是不是也就不能传输数据了?

比如,我用ADSL拨号上网,进接收数据的过程中,如果我把ADSL断线(不是拔网线,只是从电信服务器中注销),这时,我的程序没有捕获异常,也没有接收到任何数据,所以我的程序不知道出了这种问题,我想这也许是HTTP做成这样的,我是希望能把这段代码改一下,能自动发现与服务器的连接中断了。
现在我的解决方法是另开一线程,用于监视从服务器发来的数据,如果超过一定的时间没有接收到服务器的数据,那么就认为与服务器的连接中断了,但这不是个好方法,也许服务器在一段时间内确定没有数据来,但连接没问题,这时,监视程序也许会误判认为连接中断了。所以希望有更好的方法。
优途科技 2009-01-10
  • 打赏
  • 举报
回复
up
设备管理系统 2009-01-10
  • 打赏
  • 举报
回复
1.当一次有大量数据时会抛出异常
=========================
采用多线程来处理大量数据



2.当网络中断时没有抛出异常
====================
网络中断是不是也就不能传输数据了?

111,130

社区成员

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

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

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