关于本文
本文是通过利用生成式 AI 的自动化流程创建的。我们确认了 .NET Socket API 和 UDP 规范,将其整理为仅在 localhost 上观察发送端 endpoint 和 datagram 的形式。验证状态:📘 已确认 .NET 与 UDP 官方规范,未在 Windows 实机上验证
UDP 不需要像 TCP 那样以建立连接为前提就能发送数据报。在 localhost 上发送 1 条消息,就能从代码形态上确认两者的区别。
首先尝试
先运行接收端。
$udp = [Net.Sockets.UdpClient]::new(9876)
$remote = [Net.IPEndPoint]::new([Net.IPAddress]::Any,0)
try {
$bytes = $udp.Receive([ref]$remote)
"[SUCCESS] From=$remote Text=$([Text.Encoding]::UTF8.GetString($bytes))"
} finally { $udp.Dispose() }
从另一个 PowerShell 窗口发送。
$udp = [Net.Sockets.UdpClient]::new()
try {
$b=[Text.Encoding]::UTF8.GetBytes('PANDA')
[void]$udp.Send($b,$b.Length,'127.0.0.1',9876)
} finally { $udp.Dispose() }
观察此处
接收端显示发送端 endpoint 与PANDA时,即表示冒烟测试(Smoke Test)成功。同时注意,它没有对应 TCP 的Listen/Accept的连接建立步骤。
修改一处试试
将目标端口更改为9877。消息将无法送达 9876 端口的接收端。UDP 仅根据“已发送”的返回结果,不保证目标应用程序已完成接收。
如果在工作中应用
它有助于作为学习 DNS 或监控协议的入口、实现 localhost 简易通知,以及排查使用 UDP 的产品故障。在业务实现中,必须以消息丢失、重复、乱序和消息大小限制为前提进行设计,切勿将重要数据视为“发送了就等于送达”。
