首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

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

2013-09-12 
如何停止用阻塞代码的子线程本帖最后由 bigbillybear 于 2013-09-06 13:48:30 编辑小弟写了个TCPIP服务器

如何停止用阻塞代码的子线程
本帖最后由 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

热点排行