请教关于C#网络编程中处理各种异常情况的一个解决方案

时间:2022-08-29 16:13:01
最近学习C#的网络编程,对于服务器和客户端通信时出现的异常情况比较困惑
请教各位给一个解决方案:
下面是我的监听方法:
private void Listen ( )
{
   //创建一个tcpListener对象,此对象主要是对给定端口进行侦听
   Int32 port = 1234;
   IPAddress localAddr = IPAddress.Parse("127.0.0.1");
   tcpListener = new TcpListener ( localAddr, port ) ;
   //开始侦听
   tcpListener.Start ( ) ; 
   //返回可以用以处理连接的Socket实例
   socketForClient = tcpListener.AcceptSocket ( ) ; 
   try
   {
    //如果返回值是"true",则产生的套节字已经接受来自远方的连接请求
    if ( socketForClient.Connected )
    {
      listBox1.Items.Add ( "已经和客户端成功连接!" ) ;
      //创建networkStream对象通过网络套节字来接受和发送数据
      networkStream = new NetworkStream ( socketForClient ) ;
                                                                         streamReader = new StreamReader (networkStream ) ;                      
streamWriter = new StreamWriter ( networkStream ) ;                      

     while (  socketForClient.Connected)
     {
      //从当前数据流中读取一行字符,返回值是字符串
      string msg = streamReader.ReadLine ( ) ;
      listBox1.Items.Add ( "收到客户端信息:" + msg ) ;
      if ( textBox1.Text != "" )
      {
        listBox1.Items.Add ( "往客户端反馈信息:" + textBox1.Text ) ;
        streamWriter.WriteLine ( textBox1.Text ) ;
        streamWriter.Flush ( ) ; 
       }
       else 
      { 
streamWriter.WriteLine (" hhehehehehe ") ;
streamWriter.Flush ( ) ; 
       }
      } 
      }
      }
     catch ( Exception ey )
     {
MessageBox.Show("hahaha");  //客户端单方面撤销,也会进入这个异常
MessageBox.Show ( ey.ToString ( ) ) ;
      }
     }
接着我采用了线程:
 _thread1 = new Thread ( new ThreadStart ( Listen ) ) ; 
 _thread1.Start ( ) ;
启动了监听。
下面我要用一个按钮来关闭这个监听:
if(networkStream!=null) networkStream.Close ( ) ;
if(streamReader!=null) streamReader.Close ( ) ;
if(streamWriter!=null) streamWriter.Close ( ) ;
if(_thread1!=null)    _thread1.Abort ( ) ;
if(tcpListener!=null) tcpListener.Stop ( ) ; 
if(socketForClient!=null) socketForClient.Shutdown ( SocketShutdown.Both ) ;
if(socketForClient!=null) socketForClient.Close ( ) ;

以上就是基本的程序片断,下面说一下异常情况:
1.当客户端单方面关闭程序时,服务器这边会进入我写的捕获异常。
  这是正常的情况吗,对服务器有其他影响吗。可以有好的方法解决吗。
2.当服务器用按钮关闭这个监听时又会出现:
  无法从网络连接中读取数据,因为一个线程正在被终止。
  这个问题怎么解决呢,要关闭监听线程,而这时监听程序又正在接受数据

总之,求一个好的网络通信一个好的解决方案,避免诸多异常。
另外,问一问有没有好的关于C#网络编程方面的例子和书籍可以下载。
先谢谢各位了!!!!!!!!!

2 个解决方案

#1


1.客户端关闭程序的时候,发送一个标记过来。通知服务器端关闭这个socket


似乎没法避免,只能在捕捉后根据实际要求处理它

#2


在catch语句块中写log文件。

#1


1.客户端关闭程序的时候,发送一个标记过来。通知服务器端关闭这个socket


似乎没法避免,只能在捕捉后根据实际要求处理它

#2


在catch语句块中写log文件。