Vb。net多线程通讯客户端

  • 格式:pdf
  • 大小:267.31 KB
  • 文档页数:13

与多线程通讯文档对应这是一个客户端代码:客户端有两个窗口:Land窗口和FormMain窗口Land窗口为启动窗口Imports Imports .SocketsImports System.TextImports System.Text.EncodingImports System.ThreadingImports System.IOPublic Class LandDim clientstring As ClientStringDim udpClient As New UdpClient(11000)Dim sendBytes As[Byte]()Private dljs As Integer = 0 '登陆计时器Public SocketStream As NetworkStream'用以向网络基础数据流传送数据Private bWriter As BinaryWriter'用以向网络基础数据流获得数据Private bReader As BinaryReaderPrivate swWriter As StreamWriter'用以向网络基础数据流传送数据Dim Client_nsStream As NetworkStream'创建发送数据的网络基础数据流Dim tcpClient As .Sockets.TcpClient'通过它实现向远程主机提出TCP连接申请Private tcpConnect As Boolean = False'定义标识符,用以表示TCP连接是否建立Dim Thread1 As Thread'抓包用的线程Dim Thread2 As ThreadDim Thread3 As Thread'一直循环接收数据Private Delegate Sub voiddelegate(ByVal a As String, ByVal bian As String)Private ji As Integer = 0 '只计数一次Public Sub CloseThread()Thread1.Abort()End SubPrivate Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click clientstring = New ClientStringSelect Case Button1.TextCase"登陆"Dim sdd As String = clientstring.Denglu(TextBox1.Text, TextBox2.Text)' MsgBox(sdd)SendString(sdd)Case"关闭"System.Environment.Exit(0)End SelectEnd SubPublic Sub SendString(ByVal sedString As String)bWriter = New BinaryWriter(Client_nsStream)bWriter.Write(sedString)bWriter.Flush()End SubPublic Sub SendString(ByVal sedString As String, ByVal ccnss As NetworkStream)bWriter = New BinaryWriter(ccnss)bWriter.Write(sedString)bWriter.Flush()End SubPrivate Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosingSystem.Environment.Exit(0)End SubPrivate Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.LoadudpClient.JoinMulticastGroup(.IPAddress.Parse("224.224.224.224"))udpClient.Client.ReceiveTimeout = 10000 '表示包的超时期限 0为无限大udpClient.Client.Blocking = False' Socket 将阻止,则为 true;否则为 false。

默认值为 true。

Button1.Enabled = FalseControl.CheckForIllegalCrossThreadCalls = False'窗口最大化Me.MaximizeBox = False'最大化按钮不可用Me.FormBorderStyle = Windows.Forms.FormBorderStyle.FixedDialog'''''''''' Thread1 = New System.Threading.Thread(AddressOf JianTin)'''''' Thread1.Start()Timer2.Enabled = TrueEnd Sub''' <summary>''' 获取服务器发送来的消息''' </summary>Public Function GetMessage() As StringDim strMsg As String = ""Threading.Thread.Sleep(50)If Client_nsStream Is Nothing ThenReturn"与服务器的连接已断开"End IfbReader = New BinaryReader(Client_nsStream)TrystrMsg = bReader.ReadStringReturn strMsgCatch ex As IOExceptionClient_nsStream = NothingThreading.Thread.Sleep(50)FinallybReader = NothingEnd Try' Timer1.Enabled = TrueCloseThread()Return strMsgEnd Function''' <summary>''' 监听守护线程如果断开就重新连接''' </summary>Public Sub JianChe(ByVal con As TcpClient)Dim strMsg As String = ""Dim ccStream As NetworkStreamDim Cons As New TcpClientCons = conccStream = Cons.GetStream()While TrueThreading.Thread.Sleep(50)If ccStream Is Nothing Then' Return "与服务器的连接已断开"Label3.ForeColor = Color.RedLabel3.Text = "与服务器的连接已断开"' Button1.Text = "关闭"' Timer1.Enabled = TrueButton1.Enabled = FalseThreading.Thread.Sleep(3000)'Thread1 = New System.Threading.Thread(AddressOf JianTin)' Thread1.Start() '如果与服务器连接断开重新启动IP监听线程' Thread2.Abort() '如果与服务器连接断开就关闭线程ElseTry'''在这里加入对数据的处理函数Dim jjss As String = JieShou(ccStream)If jjss = ""Then' MsgBox("与服务器断开")Label3.Text = "与服务器断开"Button1.Enabled = FalseThread2.Abort()ElseDim fg() As Stringfg = Split(jjss, TongxunDingYi._FENGE)Select Case fg(0) '消息头Case TongxunDingYi._DENGLUSelect Case Trim(fg(1))Case"成功"FormMain.Sethuan(TextBox1.Text & " :同学欢迎回来!")Me.Hide()udpClient.Close()FormMain.SetccStream(ccStream)FormMain.ShowDialog()' Thread1 = NewSystem.Threading.Thread(AddressOf ShowForm)' Thread1.Start()Case"失败"MsgBox("用户名或密码错误!")Case"用户在线"MsgBox("用户在线不要重复")End SelectCase TongxunDingYi._TKEnd SelectEnd IfCatch ex As IOExceptionClient_nsStream = NothingThreading.Thread.Sleep(50)FinallybReader = NothingEnd TryEnd If' Return strMsgEnd WhileEnd SubPrivate Sub ShowForm()FormMain.ShowDialog()End Sub''' <summary>''' 抓包得到服务器IP,在没有连接的时候开启连接后关闭''' </summary>Public Sub JianTin()Try' Return "与服务器的连接已断开"' Dim RemoteIpEndPoint As New IPEndPoint(IPAddress.Any, 0)Dim RemoteIpEndPoint As NewIPEndPoint(.IPAddress.Parse("224.224.224.224"), 0)Dim receiveBytes As[Byte]() = udpClient.Receive(RemoteIpEndPoint)Dim returnData As String = ASCII.GetString(receiveBytes)Label3.Text = "接收到: " + returnData.ToString()Label3.ForeColor = Color.Green' Timer1.Enabled = Falsedljs = 0Dim ipRemote As IPAddress'Dim sHostName As StringDim tcpClient As TcpClientipRemote = IPAddress.Parse(returnData.ToString())tcpClient = New Sockets.TcpClient(returnData.ToString(), 11002)'''''MsgBox(tcpClient.Connected) 连接状态'对远程主机的11000端口提出TCP连接申请Client_nsStream = tcpClient.GetStream()'使用获取的网络基础数据流来初始化StreamWriter实例tcpConnect = TrueLabel3.Text = JieShou(Client_nsStream)' Label3.Text = GetMessage()Timer2.Enabled = FalseButton1.Enabled = TrueThread2 = New System.Threading.Thread(AddressOf JianChe)''ArryThread.Add(Thread1)Thread2.Start(tcpClient) ' 启动新线程。