读书人

怎么停止用阻塞代码的子线程

发布时间: 2013-09-12 22:07:00 作者: rapoo

如何停止用阻塞代码的子线程
本帖最后由 bigbillybear 于 2013-09-06 13:48:30 编辑 小弟写了个TCPIP服务器程序,用一个子线程等待客户端连接,一旦客服端连接进来,就再分配一个子线程接受数据,但是我发现如果客户端网线被拔了,再连接进来,服务器会再次给这个客户端分一个子线程,由于处理客户端的子线程使用了阻塞语句networkStream.Read,所以abort无法停止这个线程,请问大家有什么好主意。

这是等待连接的子线程,其实我也停不下来,除非用serverSocket.stop捕捉错误出去


Try
'阻塞进程,用标志位为也没用
Do While True
clientSocket = serverSocket.AcceptTcpClient()
myWaitData = New Thread(AddressOf WaitData)
myWaitData.Start(clientSocket)
Loop
Catch ex As Exception

End Try




这是接受数据的子线程


Private Sub WaitData(ByVal inClientSocket As TcpClient)
Dim clientSocket As TcpClient
clientSocket = inClientSocket

Dim infiniteCounter As Integer
Dim bytesFrom(10024) As Byte

Dim mybytes() As Byte

requestCount = 0
'for做while循环模式
For infiniteCounter = 1 To 2
infiniteCounter = 1
Try

Dim networkStream As NetworkStream = clientSocket.GetStream()
networkStream.Read(bytesFrom, 0, CInt(clientSocket.ReceiveBufferSize))

Catch ex As Exception
infiniteCounter =2


Finally

End Try
Next

End Sub


[解决办法]
当这个IP的客户端再连接进去,就关闭哈希表之前记录的这个IP的socket

读书人网 >VB Dotnet

热点推荐