(1)断开会收到一包长度为0的数据,这时就应该断开
(2)接收前先用State属性判断一下是否还在连接状态,不过同步方式应该无法判断阻塞时的情况

解决方案 »

  1.   

     
            private static void ReceiveMessage(object clientSocket)
            {
                Socket myClientSocket = (Socket)clientSocket;
                while (true)
                {
                    try
                    {
                        if (!myClientSocket.Connected || myClientSocket.Available == 0)
                            break;                    int receiveNumber = myClientSocket.Receive(result);
                        string strData = Encoding.ASCII.GetString(result, 0, receiveNumber);
                        Console.WriteLine("client {0} message {1}", myClientSocket.RemoteEndPoint.ToString(), strData);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("exception {0}", ex.Message);
                        myClientSocket.Shutdown(SocketShutdown.Both);
                        myClientSocket.Close();
                        break;
                    }            }
            }
      

  2.   

    1.难道没有考虑过客户端专门就发包长度为0的数据的情况?
    2.你所得state属性是哪个类的属性,socket没这个?