可以有多个客户端申请,符合接头暗号的才能进入通讯列表,不是阿猫阿狗随便都可以连接进来的。
定时检查客户还在不在,如果超时,则从列表中除去,避免没完没了给他们发信息。
模拟实验 使用场景 :多个客户端申请UDP连接, 服务器把自己的数据,比如压力,温度等群发送给所有的客户端(比如工程师站,现场监控屏幕等),无需进来TCP连接。
form
Imports System.Net
Imports System.Text
Public Class Form1
Private WithEvents UDP组网 As New ClsUDP组网
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
UDP组网.Connect("thisIsGroup", TxtMyPort.Text, 6)
End Sub
#Region "list显示"
Delegate Sub deltListBoxShow(ipEndPoint As IPEndPoint, ClientCount As Integer)
Private lstBoxShow = New deltListBoxShow(AddressOf subDeltListBoxShow)
Public Sub subDeltListBoxShow(ipEndPoint As IPEndPoint, ClientCount As Integer)
ListBox1.Items.Clear()
For Each 客户端 As ClsUDP组网.Cls客户端 In UDP组网.lst客户端
Dim str客户 As String = 客户端.ip + ":" + 客户端.port
ListBox1.Items.Add(str客户)
Next
ListBox1.BackColor = IIf(ClientCount > 0, Color.White, Color.Gray)
ListBox1.Refresh()
End Sub
Private Sub UDP组网_有客户(ipEndPoint As IPEndPoint, ClientCount As Integer) Handles UDP组网.有客户
Me.Invoke(lstBoxShow, ipEndPoint, ClientCount)
End Sub
Private Sub UDP组网_送客(ipEndPoint As IPEndPoint, ClientCount As Integer) Handles UDP组网.送客
Me.Invoke(lstBoxShow, ipEndPoint, ClientCount)
End Sub
#End Region
#Region "数据显示"
Private Sub UDP组网_来有效数据啦(data() As Byte, ipEndPoint As IPEndPoint) Handles UDP组网.来有效数据啦
Me.Invoke(DataShow, data, ipEndPoint)
End Sub
Delegate Sub dletDataShow(data() As Byte, ipEndPoint As IPEndPoint)
Private DataShow As New dletDataShow(AddressOf subDataShow)
Private Sub subDataShow(data() As Byte, ipEndPoint As IPEndPoint)
Dim ip As String = CType(ipEndPoint, IPEndPoint).Address.ToString '从哪里来 获取对方ip
Dim port = CType(ipEndPoint, IPEndPoint).Port.ToString '获取远程的port
LabRec.Text += ip + ":" + port + " -> " + Encoding.GetEncoding("gb2312").GetString(