VB.net中怎样实现多个客户端连接一个服务器并且与之通信
Imports System.Net.Sockets
Imports System.Net
Imports System.Threading
Imports System.Text
Public Class Form1
Dim strMessage As String
Dim myListener As Socket
Dim bteAccept(65536) As Byte
Dim bteSend(65536) As Byte
Dim EndSocket As Socket
Dim myThread1 As Thread
Private Sub StartListen()
Dim intPort As Integer
Dim bidEndPoint As IPEndPoint
intPort = Integer.Parse(Me.通信端口TextBox.Text)
bidEndPoint = New IPEndPoint(IPAddress.Parse("127.0.0.1"), intPort)
myListener = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
Try
myListener.Bind(bidEndPoint)
Dim myAsyncCallback As New AsyncCallback(AddressOf AcceptEnd)
myListener.Listen(100)
myListener.BeginAccept(myAsyncCallback, myListener)
Me.联机信息RichTextBox.Text = "等待联机中,开始整理数据......"
Catch ex As Exception
MessageBox.Show(ex.Message, "打开连接错误", MessageBoxButtons.OK, MessageBoxIcon.Warning)
End Try
End Sub
Private Sub AcceptEnd(ByVal pIAsyncResult As IAsyncResult)
EndSocket = myListener.EndAccept(pIAsyncResult)
Me.联机信息RichTextBox.Text += vbCrLf & "已接受客户端联机请求!"
Dim myAsyncCallback As New AsyncCallback(AddressOf ReceiveData)
EndSocket.BeginReceive(bteAccept, 0, 65536, SocketFlags.None, myAsyncCallback, EndSocket)
Me.联机信息RichTextBox.Text += vbCrLf & "开始接收客户端传送的数据内容......"
End Sub
Private Sub ReceiveData(ByVal pIAsyncResult As IAsyncResult)
Dim intByte As Integer
intByte = EndSocket.EndReceive(pIAsyncResult)
If intByte > 0 Then
Me.接收数据RichTextBox.Text += Encoding.Default.GetString(bteAccept)
End If
Me.联机信息RichTextBox.Text += vbCrLf & "成功接收客户端所传送的数据内容! " & intByte.ToString & " 个字节"
Array.Clear(bteAccept, 0, bteAccept.Length)
Dim myAsyncCallback As New AsyncCallback(AddressOf ReceiveData)
EndSocket.BeginReceive(bteAccept, 0, 65536, SocketFlags.None, myAsyncCallback, EndSocket)
End Sub
Private Sub SendStart()
Dim myAsyncCallback As New AsyncCallback(AddressOf SendData)
bteSend = Encoding.Default.GetBytes(Me.发送数据RichTextBox.Text)
EndSocket.BeginSend(bteSend, 0, bteSend.Length, SocketFlags.DontRoute, myAsyncCallback, EndSocket)
Me.联机信息RichTextBox.Text += vbCrLf & "开始传送数据至客户端......"
End Sub
Private Sub SendData(ByVal pIAsyncResult As IAsyncResult)
Dim intSend As Integer
intSend = EndSocket.EndSend(pIAsyncResult)
Me.联机信息RichTextBox.Text += vbCrLf & "数据传送完成,总共传送 " & intSend.ToString & " 个字节!"
End Sub
Private Sub UsingAsyncSocketServer_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = False
End Sub
Private Sub 停止联机Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 停止联机Button.Click
myListener.Close()
myThread1.Abort()
MessageBox.Show("结束联机操作!", "停止监听", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub
Private Sub 开始监听Button_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 开始监听Button.Click
myThread1 = New Thread(New ThreadStart(AddressOf StartListen))
myThread1.Start()
End Sub
Private Sub 发送Button_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 发送Button.Click
Dim myThread As New Thread(New ThreadStart(AddressOf SendStart))
myThread.Start()
End Sub
End Class