一、UDP广播核心必考原理
1.1 广播地址定义
255.255.255.255:全局局域网广播地址,向该地址发送的数据包,局域网内所有监听对应端口的设备都能收到。
1.2 UDP广播独有特性
基于UDP无连接协议,无需握手、无需一对一绑定
广播服务端不需要绑定本地端口,只需要Connect广播地址+固定端口
广播发送无需指定远端EndPoint,直接Send即可全网推送
客户端必须绑定对应监听端口,才能接收广播消息
一对多通信:一个服务端发送,多个客户端同时接收
1.3 单播 VS 广播(考试简答题)
单播:一对一通信,必须指定对方IP和端口
广播:一对多通信,目标为255.255.255.255,全网同端口客户端接收
二、UDP广播服务器源码(_4广播服务器)
2.1 服务端核心逻辑
广播服务端特点:不绑定本地端口、Connect广播地址、发送无需指定终端
2.2 完整可运行代码
using System; using System.Net; using System.Net.Sockets; using System.Text; using System.Windows.Forms; namespace _4广播服务器 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } UdpClient udp; private void button1_Click(object sender, EventArgs e) { try { if (button1.Text == "启动") { // 广播服务端:无需绑定本地端口,直接创建UdpClient udp = new UdpClient(); // 绑定全局广播地址 + 目标端口9999 IPEndPoint point = new IPEndPoint(IPAddress.Parse("255.255.255.255"), 9999); // 连接广播域,后续所有发送全部自动广播 udp.Connect(point); button1.Text = "停止"; } else { // 释放资源 udp.Close(); udp = null; button1.Text = "启动"; } } catch (Exception) { throw; } } // 广播发送按钮 private void button2_Click(object sender, EventArgs e) { // 编码字符串 byte[] bs = Encoding.UTF8.GetBytes(textBox1.Text); // 已Connect广播地址,无需传EndPoint,直接全网发送 udp.Send(bs, bs.Length); } } }2.3 服务端考点解析
new UdpClient()无参构造:不占用本地端口,专门用于发送udp.Connect(广播终端):限定后续所有发送为广播模式Send(字节数组,长度)重载:无需指定远端地址,简化广播发送
三、UDP广播客户端源码(_5广播客户端)
3.1 客户端核心逻辑
客户端必须固定绑定监听端口9999,持续异步接收全网广播消息
3.2 完整可运行代码
using System; using System.Net; using System.Net.Sockets; using System.Threading; using System.Threading.Tasks; using System.Text; using System.Windows.Forms; namespace _5广播的客户端 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } CancellationTokenSource cts; UdpClient udpClient; private void button1_Click(object sender, EventArgs e) { try { if (button1.Text == "启动") { // 客户端必须绑定本机IP+广播端口,才能接收广播数据 IPEndPoint point = new IPEndPoint(IPAddress.Parse("192.168.219.9"), 9999); udpClient = new UdpClient(point); button1.Text = "停止"; // 开启异步循环接收广播 cts = new CancellationTokenSource(); Task.Run(async () => { while (!cts.IsCancellationRequested) { // 异步接收,自带远端终端信息 var result = await udpClient.ReceiveAsync(); // 跨线程更新UI Invoke(new Action(() => { string msg = Encoding.UTF8.GetString(result.Buffer); richTextBox1.Text += $"{result.RemoteEndPoint}:{msg}{Environment.NewLine}"; })); } }, cts.Token); } else { // 安全关闭释放 cts?.Cancel(); udpClient.Close(); udpClient = null; button1.Text = "启动"; } } catch (Exception) { throw; } } } }3.3 客户端考点解析
客户端必须绑定端口9999,与服务端广播端口一致,否则收不到消息
使用
ReceiveAsync()异步接收,不阻塞UI线程返回值
UdpReceiveResult:包含缓冲区数据 + 发送方终端CancellationTokenSource 实现线程安全停止
四、UDP广播考试核心考点汇总
4.1 广播通信流程(背诵)
广播服务端:创建UdpClient → Connect(255.255.255.255:端口) → 直接Send发送
广播客户端:绑定本机IP+相同端口 → 循环监听接收 → 展示消息
局域网内所有同端口客户端,均可接收同一条广播消息
4.2 必考区别(单播/广播)
单播:一对一,必须指定目标IP端口
广播:一对多,目标255.255.255.255,无需逐个客户端寻址
4.3 易错扣分点
广播服务端不能绑定端口,只需要Connect广播地址
广播客户端必须绑定对应端口,否则无法监听
收发端口必须严格一致,否则通信失败
子线程更新UI必须Invoke,否则程序闪退
广播数据包无法跨网段,仅限局域网内部
五、简答题满分模版
UDP广播通信基于无连接UDP协议实现一对多局域网通信,服务端连接全局广播地址255.255.255.255与固定端口,无需绑定本地端口,直接发送数据即可完成全网广播。客户端绑定与服务端一致的监听端口,通过异步循环接收广播消息,实现局域网内所有客户端同步接收服务端消息。UDP广播无需建立连接、通信高效,适用于局域网设备群发、消息推送场景。