好像以前有这样的贴子。
你搜索一下吧!
GOOD LUCK!

解决方案 »

  1.   

    我也问过这个问题.就是在Server上listen客户端的连接然后clientSocket = listener.AcceptSocket()
    ...结果,客户端的soket关闭之后.服务器端的clientSocket.Connected仍然是true.有网友赐教就是半连接的状态.我用netstat -a看了一下,那个端口连接的状态是TIMEWAIT,从tcp/ip三卷本中说TIMEWAIT,会等待2倍与最长报文时间,然后自己close.不过,我当时好像没等到它close.不知道这个时间到底是多长.
    另外一种方法就是关闭客户连接之前,发一个特定的包标志客户打算关闭,然后再处理吧.
      

  2.   

    设置超时,当SOCKET在一定时间内没收到任何信息时。
    它就会发出异常。
      

  3.   

    while ( true )
    {
    Byte[] recmsg=new Byte [1024];
    string strmsg;
    int bytes ;

    bytes=Mysocket.Receive (recmsg,recmsg.Length ,0);
    strmsg=Encoding.Default .GetString (recmsg,0,bytes); 
    if (strmsg=="###")
    {
    Mysocket.Shutdown (SocketShutdown.Both);
    Mysocket.Close ();
    listBox1.Items.Add( "已断开同客户端的连接");
    break;
    }

    listBox1.Items.Add( "收到客户端信息:" + strmsg );

    }可我发现客户端断开后,再也连不上了,为什么,可不可以采用这样的方式
      

  4.   

    使用轮询,看这:http://www.csdn.net/develop/Read_Article.asp?Id=15117
      

  5.   

    看看《TCP/IP详解》这叫半连接,你可以设定服务器在一段时间内没收到响应就自己关闭。
    或者,在客户端关闭之前发送一个自己关闭的标志,告诉服务器,服务器收到后自己关闭。good luck