【发布时间】:2015-07-08 21:36:40
【问题描述】:
我有一个工作正常的 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
【问题讨论】:
标签: vb.net multithreading tcplistener