我在 客户端 主动断开 socket 连接(TcpClient.Close())后,在服务端看 TcpClient.Connected 还是true,  也没有在服务端扑捉到 事件, 请问怎么样知道 远程断开了,PS: 我想过主动向远程发数据,如果不成功就是断开了,但是感觉这样还要扑捉错误,消耗资源有点大

解决方案 »

  1.   

    服务器会Receive到一个数据
    只不过数据长度为0
    这个就是断开了
      

  2.   

    使用Socket的方法Accept(),如果远程的客户端断开了,那么服务器端得到一个NULL。
      

  3.   

    确实主动断开有Receive一个空数据, 我开始的代码写错了,没有执行到,现在请问如果是意外断开,服务器怎么判断比较节省资源?
      

  4.   

    另外 TcpClient.Close() 后 使用过的端口是不是不能再使用了?
      

  5.   

    只要在发送或接收数据的时候判断下Socket状态就可以了,发送的话肯定有错误返回,而接收的话是无数据直接返回,至于Close后肯定不能再用,再用就必须重新Connect
      

  6.   

    我 调用 Socket状态 的时候 基本都不准
      

  7.   

    你 用 Ping 那个类 
      

  8.   

    除了心跳包  还有什么办法?  用心跳包  还要加好多代码 来值守  socket