在我的多线程服务器应用程序中,每个客户端的线程都以这种方式生成:
While (True)
counter += 1
clientSocket = serverSocket.AcceptTcpClient()
log.debug("Client No: " + Convert.ToString(counter) + " started!")
Dim client As New handleClinet
clients.Add(clientSocket)
client.startClient(clientSocket, Convert.ToString(counter))
End While
和handleClinet:
Public Sub startClient(ByVal inClientSocket As TcpClient, ByVal clineNo As String)
Me.clientSocket = inClientSocket
Me.clNo = clineNo
Dim ctThread As Threading.Thread = New Threading.Thread(AddressOf doChat)
ctThread.Name = "client" + clineNo
ctThread.Start()
End Sub
如您所见,该线程的名称为client1,client2等。当用户注销时,会将命令与clientID一起发送到服务器。但是,如何杀死特定的客户端进程?
类似的东西:
Public Sub killClient(ByVal clientID As Int32)
'Code to kill "client"+clientID
End Sub
答案 0 :(得分:2)
线程只是执行工具。每当你认为你需要推动一个线程时,请考虑线程正在做什么。当你不再需要医生时,你就不会杀了他。你离开他的办公室。
如果要干净地关闭客户端,请在客户端结构中设置“shutdown”标志。让处理客户端的代码定期检查此标志。忘掉什么线程正在做什么,这是你要关闭的客户端。
如果太被动,请关闭与客户端的TCP连接。这将导致任何触及客户端连接的代码出错。
忘记它碰巧是一个处理客户端的专用线程。 您编写了代码。对它进行编码,以便在处理客户端之前,通过检查是否适合处理客户端来停止处理客户端。