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