CSDN-CSDN社区-.NET技术-C#

收藏 请教用StreamReader读取网络数据时的问题[问题点数:20,无满意答案结帖,结帖人:icom99]

  • icom99
  • 等 级:
  • 结帖率:
楼主发表于:2009-01-10 00: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请问,则可以一直收到数据,就象股票数据那样,隔一定时间就会发送一批数据过来”,但同时能监控何时连接有问题(一旦有问题就会抛出异常,捕获异常后才能进行必须的对应处理),但又能一次接收很大数量的数据?
回复次数:4
#1楼 得分:0回复于:2009-01-10 00:21:21
1.当一次有大量数据时会抛出异常
=========================
采用多线程来处理大量数据


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

#2楼 得分:0回复于:2009-01-10 00:36:44
up
#3楼 得分:0回复于:2009-01-17 11:05:06
to javakiki
1.当一次有大量数据时会抛出异常
=========================
采用多线程来处理大量数据

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

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

比如,我用ADSL拨号上网,进接收数据的过程中,如果我把ADSL断线(不是拔网线,只是从电信服务器中注销),这时,我的程序没有捕获异常,也没有接收到任何数据,所以我的程序不知道出了这种问题,我想这也许是HTTP做成这样的,我是希望能把这段代码改一下,能自动发现与服务器的连接中断了。
现在我的解决方法是另开一线程,用于监视从服务器发来的数据,如果超过一定的时间没有接收到服务器的数据,那么就认为与服务器的连接中断了,但这不是个好方法,也许服务器在一段时间内确定没有数据来,但连接没问题,这时,监视程序也许会误判认为连接中断了。所以希望有更好的方法。
#4楼 得分:0回复于:2009-02-03 20:59:51
?
相关问题
关于邮件发送时用streamreader读取文件作为body时编码问题.NET技术 ...
OledbDataReader 读取数据写到文本中遇到”\0“ StreamReader的对象读取 ...
请教:如何用C#从文件中读取数据.NET技术/ C# - CSDN社区community ...
请教从文本文件中读取数据到数据库时遇到的问题.NET技术/ C# - CSDN ...
操作已超时!,在读取网址内容时,请教!!! .NET技术/ ASP.NET ...
救命啊!为什么我不能从文件中读出中文数据!(在线等!)请高手指点 ...