我有一个可以正常运行的TCP服务器,但现在我需要以安全的方式停止它和所有线程。 到目前为止我研究Abort方法还不行
我调试了,当服务器启动并且没有连接时,似乎代码在行上停止
Server = New TcpListener(IPAddress.Any, Port)
因此,当我调用StopServer时,我收到有关WSACancelBlokingCall的错误 我无法弄清楚如何正确停止服务器。
这是完成的代码,除了StartTcpClient是收到的数据。
#Region "TCP Receive variables"
Dim TcpOpen As Boolean = False
Private Server As TcpListener = Nothing
Private ServerThread As Thread = Nothing
Friend AckString As String = ""
#End Region
#Region "TCP"
Public Sub StopServer()
Server.Stop()
ServerThread.Abort()
TcpOpen = False
End Sub
Public Sub InitServer(ByVal Port As Integer)
Server = New TcpListener(IPAddress.Any, Port)
ServerThread = New Thread(AddressOf ConnectionListener)
ServerThread.IsBackground = True
ServerThread.Start()
TcpOpen = True
End Sub
Private Sub ConnectionListener()
Server.Start()
While True
Dim client As TcpClient = Server.AcceptTcpClient()
Dim T As New Thread(AddressOf StartTcpClient)
T.IsBackground = True
T.Start(client)
End While
End Sub
#End Region
修改 我在代码中做了一些更改,现在看起来像我需要的那样工作。
Public Sub StopServer()
TcpOpen = False
Server.Stop()
ServerThread = Nothing
End Sub
Private Sub ConnectionListener()
Server.Start()
While True
If TcpOpen Then
If Server.Pending Then
Dim client As TcpClient = Server.AcceptTcpClient()
Dim T As New Thread(AddressOf StartTcpClient)
T.IsBackground = True
T.Start(client)
Else
System.Threading.Thread.Sleep(10)
End If
Else
Exit While
End If
End While
End Sub
答案 0 :(得分:0)
应该从客户端(而不是服务器)关闭连接。
客户端应向服务器发送应用程序消息以停止处理。
服务器应停止处理
服务器应执行BeginDisconnect
服务器应向客户端发送响应,指示可以关闭连接
客户端应该关闭连接。
发生BeingDisconnect时服务器应该关闭/配置监听器。