龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VB开发 >

在vb.net中运用多线程实现远程数据收集[图](2)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
当主线程侦听到远程DVS有连接请求时,立即执行AcceptTcpClient方法,创建一个TcpClient实例,并将它放入sockets数组。同时创建线程对象serverthread。 声明创建线

   当主线程侦听到远程DVS有连接请求时,立即执行AcceptTcpClient方法,创建一个TcpClient实例,并将它放入sockets数组。同时创建线程对象serverthread。

  声明创建线程时,使用 ThreadStart 委托作为其唯一参数的构造函数创建 Thread 类的新实例,创建线程时需要传递处理连接的过程或函数的地址以被线程调用。创建线程委托,传递需要操作的过程的地址,这部分的代码如下所示:

Public Sub WaitData()

        Try

            Dim ipHostInfo As IPHostEntry = Dns.Resolve(Dns.GetHostName())

            Dim localAddr As IPAddress = ipHostInfo.AddressList(0)

            s = New TcpListener(localAddr, ListenPort)

            s.Start()’开始侦听连接请求

            Dim Recdatathread As New Thread(New ThreadStart(AddressOf RecDataProc)) ’创建数据接收线程

            Recdatathread.IsBackground = True

            Recdatathread.Start()’启动线程

            While True

                Dim client As TcpClient = s.AcceptTcpClient()

                Monitor.Enter(sockets) '在指定对象上获取排他锁

                sockets(socketcount) = client

                socketcount = socketcount + 1

                Monitor.Exit(sockets) '释放指定对象上的排他锁                 

            End While

        Catch e As SocketException

            s.Stop()

            saveErrLog(Date.Now, CType(s.AcceptTcpClient.Client.RemoteEndPoint, IPEndPoint).Address.ToString(), e.Message)’写入错误日志

        Catch e As ThreadAbortException

            t.Abort()

            saveErrLog(Date.Now, CType(s.AcceptTcpClient.Client.RemoteEndPoint, IPEndPoint).Address.ToString(), e.Message) ’写入错误日志

        Finally

            t.Abort()

            End

        End Try

End Sub

精彩图集

赞助商链接