TcpClient.Active 属性从 TcpClient 派生的类可以使用该属性跟踪基础 Socket 连接状态。

解决方案 »

  1.   

    不行阿,我断开了tcp服务 ,TcpClient.Active 还是返回true
      

  2.   

    TcpClient.Active 属性有点问题。好像是。NET BUG吧!
    一般的情况。假如你要关闭服务时向客户端发送一断开标志。
    在客户端收到此标志时就知道服端已关闭。然后做相应处理。
      

  3.   

    现在我不能改tcp服务器端的代码,tcp服务器端关闭,我怎么判断???
      

  4.   

    catch(SocketException e)  {
         //已断开
    }
      

  5.   

    sockServer.SetSocketOption(
    SocketOptionLevel.Socket,
    SocketOptionName.ReceiveTimeout,
    /* ReceiveTimeout */
    180000
    );

    sockServer.SetSocketOption(
    SocketOptionLevel.Socket,
    SocketOptionName.SendTimeout,
    cls_Const.sendSockTimeOut
    /* sendSockTimeOut */
    180000
    );

    if (sockServer.Connected){
     ...
    }
    else {
    //unConnected
    }
    try {
    getByteLen = sockServer.Receive(recvBytes,sockBuffer,0); 
    }
    catch(SocketException ex) {
    // unConnected
    if (ex.ErrorCode == 10054 || ex.ErrorCode == 10060) {
    break;
    }
    else{
    MessageBox.Show(ex.Message.ToString() + "\rErrorCode: " + ex.ErrorCode);
    break;
    }
      

  6.   

    第二个sendSockTimeOut 应为sockServer.SetSocketOption(
    SocketOptionLevel.Socket,
    SocketOptionName.SendTimeout,
    /* sendSockTimeOut */
    180000
    );
      

  7.   

    在Receive 下还要加一个判断if (getByteLen < 1){
      //unConnected
      break;
    }