严谨一些的做法是客户端关闭之前,需要给服务器端发一个关闭请求的消息。
看来你的客户端根本没这一消息,那只能很丑地到处加Connected的判断了。

解决方案 »

  1.   

            /// <summary>
            /// 在UDP消息服务开发中时不时的会遇到这样一个问题:在UDP通信过程中,如果客户端中途断开
            /// 服务器会收到一个SocketException,错误ID为10054,描述是“远程主机强迫关闭了一个现有的连接”
            /// 紧接着的事就可怕了,UDP服务终止监听,所有客户端都受到了影响。也就是说一个客户端引起的异常导致了整个系统的崩溃。这个问题可是太严重了。
            /// </summary>
            private void _DeBug10054()
            {
                uint IOC_IN = 0x80000000;
                uint IOC_VENDOR = 0x18000000;
                uint SIO_UDP_CONNRESET = IOC_IN | IOC_VENDOR | 12;            _UdpClent.Client.IOControl((int)SIO_UDP_CONNRESET, new byte[] { Convert.ToByte(false) }, new byte[4]);
            }
      

  2.   

    。如果客户端是正常断线 服务器这个时候也关闭对应的SOCKET
    。客户端非正常断线应该有断线重连机制。
      

  3.   

    重新实例化 重新连接 记得每次要CLOSE哦