TCP / IP检测侦听器上是否存在当前连接的客户端

时间:2015-08-13 02:48:38

标签: vb.net tcpclient tcp-ip

我的TCP / IP侦听器有没有办法检测当前是否有连接的客户端?

这是我的代码:

Public Sub StopListen()
    client.Close()
    tcpClientThread.Abort()
    server.Stop()
    SyncLock accessLock
        endThread = True
    End SyncLock
    Btn_Listen.Text = "Listen"
End Sub

该代码中的问题是每当用户按下Stop Listen按钮时,当前没有连接到我的监听器的客户端发生错误。

我该怎么办?

Public Sub StopListen()
   If thereIsConnectedClient Then
       client.Close()
   End If

   tcpClientThread.Abort()
   server.Stop()
   SyncLock accessLock
      endThread = True
   End SyncLock
   Btn_Listen.Text = "Listen"
End Sub

1 个答案:

答案 0 :(得分:0)

一般来说,在SYNC-SYNC,ACK-ACK三次握手之后,建立连接并且TcpListener返回一个tcpClient。此tcpClient可以保存在一个数组中。此数组中的元素数表示连接数。

在正常情况下,在服务器和客户端交换数据包之后,服务器或客户端将发起FIN请求。在FIN-ACK之后,交换FIN-ACK标志,连接完成,并且可以从阵列中删除tcpClient。

现在,如果有客户端没有主动关闭套接字,那么服务器可能需要一种机制来断开非活动套接字。通过连接超时。或者定期发送一些空数据包并等待来自远程客户端的ACK以确定客户端是否仍然存在。