C# 一个简单的服务端与客户端之间的通信,为什么客户端关闭后,服务端会出错?

解决方案 »

  1.   

    这两天我刚好在看这个,呵呵
    例如socket
    1 客户端异常断开后服务端是没有响应的,此时继续对socket进行访问就会发生意外
    2 客户端强制关闭后服务端会报远端socket被强制关闭错误
    3 客户端断开后,如果服务端是异步发送和接收,在发送代码和接受代码处可能会爆意外
      

  2.   

    通讯方式太多了,这得看具体代码。如果是socket, 客户端断开以后,服务器端会收到一个\0,用来判断客户端是否已经断开。但是在一些特谁情况下,也会报出异常,服务器端同样需要用try catch 来处理客户端断开的情况
      

  3.   

    你应该是b/s就会出现这情况
    如果你是多路复用的方式来使用tcp/ip,可以这样来处理关闭问题:
    .....
                    if( 是tcp数据可用 )
                    {
                            iRet=read(iSock,szBuffer,2);
                            if( iRet == 0 )
                            {
                                    Debug(2,"连接被关闭\n");
                                    exit(0);
                            }
                            else if( iRet == -1 )
                            {
                                    Debug(2,"连接错误\n");
                                    exit(0);
                            }
                                                    //正常处理读出的数据
                                       } +1
    1 客户端异常断开后服务端是没有响应的,此时继续对socket进行访问就会发生意外
    2 客户端强制关闭后服务端会报远端socket被强制关闭错误
    3 客户端断开后,如果服务端是异步发送和接收,在发送代码和接受代码处可能会爆意外
      

  4.   

    服务端socket,tcp传输,当socket的receive函数返回0就代表客户端断开。
      

  5.   

    你用的是TCP连接。
    基于TCP通信的双方是处在长连接状态下的,因为通信双方都在不停地侦听来自对方的消息,所以,如果通信一方意外关闭,都会造成另一方的通信异常。
    解决方法:
    1.退出前,给对方发送“退出”消息
    2.在循环侦听或异步回调中,加入try{}catch{}