多线程, 1服务器, 多客户端
可以有多个客户端连入服务器,服务器对所有客户端群发。
模拟实验 使用场景 :多个客户端申请服务器TCP连接, 服务器把自己的数据,比如压力,温度等发送给所有的客户端(比如工程师站,现场监控屏幕等)
服务器:
FORM代码
Imports System.Text
Public Class Form1
Private message As String
Private WithEvents modbusTcpSrv As ClsSocketTcpSvr
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
modbusTcpSrv = New ClsSocketTcpSvr
Me.Text = modbusTcpSrv.startSvr("5450")
End Sub
Private Sub modbusTcpSrv_来客啦(ip As String) Handles modbusTcpSrv.来客啦
Me.Invoke(显示到控件, ip)
End Sub
Private Sub modbusTcpSrv_客人问(data() As Byte, who As ClsClient) Handles modbusTcpSrv.客人说
who.SendMessage(data) '例子,收到了,直接发回去
message = Encoding.UTF8.GetString(data) ' Byte转为string
message = who.ip + ":" + who.port + " -> " + message
Me.Invoke(显示到控件, message)
End Sub
#Region "显示到控件"
Delegate Sub delegate显示到控件(message As String)
Private 显示到控件 As New delegate显示到控件(AddressOf sub显示到控件)
Private Sub sub显示到控件(message As String)
LabRec.Text = message
End Sub
#End Region
Private Sub Btn群发_Click(sender As Object, e As EventArgs) Handles Btn群发.Click
modbusTcpSrv.BroadcastMessage("r u ok?")
'仅是示范显示连接列表
ListBox1.Items.Clear()
For Each c As ClsClient In modbusTcpSrv.clientList
ListBox1.Items.Add(c.ip + ":" + c.port)
Next
End Sub
Private Sub Form1_Closed(sender As Object, e As EventArgs) Handles Me.Closed
modbusTcpSrv.kill()
end
End Sub
End Class
ClsSocketTcpSvr类
Imports System.Net.Sockets
Imports System.Net
Imports System.Threading
Imports System.Text
Public Class ClsSocketTcpSvr
Dim sockedWatch As Socket
Public clientList As New List(Of ClsClient)
Dim threadWatch As Thread
Public Event 来客啦(addr As String)
Public Event 客人说(data() As Byte, client As ClsClient)
Public