我的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
答案 0 :(得分:0)
一般来说,在SYNC-SYNC,ACK-ACK三次握手之后,建立连接并且TcpListener返回一个tcpClient。此tcpClient可以保存在一个数组中。此数组中的元素数表示连接数。
在正常情况下,在服务器和客户端交换数据包之后,服务器或客户端将发起FIN请求。在FIN-ACK之后,交换FIN-ACK标志,连接完成,并且可以从阵列中删除tcpClient。
现在,如果有客户端没有主动关闭套接字,那么服务器可能需要一种机制来断开非活动套接字。通过连接超时。或者定期发送一些空数据包并等待来自远程客户端的ACK以确定客户端是否仍然存在。