
一、UDP廣播核心必考原理1.1 廣播地址定義255.255.255.255全局局域網(wǎng)廣播地址向該地址發(fā)送的數(shù)據(jù)包局域網(wǎng)內(nèi)所有監(jiān)聽對應端口的設備都能收到。1.2 UDP廣播獨有特性基于UDP無連接協(xié)議無需握手、無需一對一綁定廣播服務端不需要綁定本地端口只需要Connect廣播地址固定端口廣播發(fā)送無需指定遠端EndPoint直接Send即可全網(wǎng)推送客戶端必須綁定對應監(jiān)聽端口才能接收廣播消息一對多通信一個服務端發(fā)送多個客戶端同時接收1.3 單播 VS 廣播考試簡答題單播一對一通信必須指定對方IP和端口廣播一對多通信目標為255.255.255.255全網(wǎng)同端口客戶端接收二、UDP廣播服務器源碼_4廣播服務器2.1 服務端核心邏輯廣播服務端特點不綁定本地端口、Connect廣播地址、發(fā)送無需指定終端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 啟動) { // 廣播服務端無需綁定本地端口直接創(chuàng)建UdpClient udp new UdpClient(); // 綁定全局廣播地址 目標端口9999 IPEndPoint point new IPEndPoint(IPAddress.Parse(255.255.255.255), 9999); // 連接廣播域后續(xù)所有發(fā)送全部自動廣播 udp.Connect(point); button1.Text 停止; } else { // 釋放資源 udp.Close(); udp null; button1.Text 啟動; } } catch (Exception) { throw; } } // 廣播發(fā)送按鈕 private void button2_Click(object sender, EventArgs e) { // 編碼字符串 byte[] bs Encoding.UTF8.GetBytes(textBox1.Text); // 已Connect廣播地址無需傳EndPoint直接全網(wǎng)發(fā)送 udp.Send(bs, bs.Length); } } }2.3 服務端考點解析new UdpClient()無參構(gòu)造不占用本地端口專門用于發(fā)送udp.Connect(廣播終端)限定后續(xù)所有發(fā)送為廣播模式Send(字節(jié)數(shù)組,長度)重載無需指定遠端地址簡化廣播發(fā)送三、UDP廣播客戶端源碼_5廣播客戶端3.1 客戶端核心邏輯客戶端必須固定綁定監(jiān)聽端口9999持續(xù)異步接收全網(wǎng)廣播消息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廣播端口才能接收廣播數(shù)據(jù) IPEndPoint point new IPEndPoint(IPAddress.Parse(192.168.219.9), 9999); udpClient new UdpClient(point); button1.Text 停止; // 開啟異步循環(huán)接收廣播 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包含緩沖區(qū)數(shù)據(jù) 發(fā)送方終端CancellationTokenSource 實現(xiàn)線程安全停止四、UDP廣播考試核心考點匯總4.1 廣播通信流程背誦廣播服務端創(chuàng)建UdpClient → Connect(255.255.255.255:端口) → 直接Send發(fā)送廣播客戶端綁定本機IP相同端口 → 循環(huán)監(jiān)聽接收 → 展示消息局域網(wǎng)內(nèi)所有同端口客戶端均可接收同一條廣播消息4.2 必考區(qū)別單播/廣播單播一對一必須指定目標IP端口廣播一對多目標255.255.255.255無需逐個客戶端尋址4.3 易錯扣分點廣播服務端不能綁定端口只需要Connect廣播地址廣播客戶端必須綁定對應端口否則無法監(jiān)聽收發(fā)端口必須嚴格一致否則通信失敗子線程更新UI必須Invoke否則程序閃退廣播數(shù)據(jù)包無法跨網(wǎng)段僅限局域網(wǎng)內(nèi)部五、簡答題滿分模版UDP廣播通信基于無連接UDP協(xié)議實現(xiàn)一對多局域網(wǎng)通信服務端連接全局廣播地址255.255.255.255與固定端口無需綁定本地端口直接發(fā)送數(shù)據(jù)即可完成全網(wǎng)廣播。客戶端綁定與服務端一致的監(jiān)聽端口通過異步循環(huán)接收廣播消息實現(xiàn)局域網(wǎng)內(nèi)所有客戶端同步接收服務端消息。UDP廣播無需建立連接、通信高效適用于局域網(wǎng)設備群發(fā)、消息推送場景。