.NET 7控制台程序无法接收指定端口UDP广播消息求助
解决UDP组播接收问题(适配亚马逊Echo设备发现)
问题核心
你的代码未处理SSDP协议的组播特性——亚马逊Echo的设备发现请求是发送到IP组播地址239.255.255.250:1900,而非普通子网广播。默认的UdpClient绑定端口后,不会自动加入组播组,因此无法捕获这类组播包。
修复代码
using System.Net; using System.Net.Sockets; using System.Text; // SSDP组播地址,Echo设备发现的目标地址 var multicastIp = IPAddress.Parse("239.255.255.250"); const int ssdpPort = 1900; // 初始化UdpClient并绑定端口 using var udpClient = new UdpClient(ssdpPort, AddressFamily.InterNetwork); // 加入组播组,指定本地网卡IP(替换为你的实际本地IP) udpClient.JoinMulticastGroup(multicastIp, IPAddress.Parse("192.168.178.119")); IPEndPoint? remoteEndPoint = default; Console.WriteLine("开始监听Echo设备发现请求..."); while (true) { var buffer = udpClient.Receive(ref remoteEndPoint); var messageContent = Encoding.UTF8.GetString(buffer); Console.WriteLine($"来自 {remoteEndPoint} 的请求:\n{messageContent}\n---分割线---"); }
关键修改点
- 加入组播组:调用
JoinMulticastGroup让客户端订阅SSDP的组播地址,这是接收Echo发现请求的核心步骤。 - 指定本地网卡:如果PC有多网卡,明确绑定本地IP可避免客户端监听错误接口,确保捕获目标子网的组播流量。
- using声明:自动管理
UdpClient资源,防止端口长期占用。
额外排查项
- 检查端口占用:执行命令
netstat -ano | findstr :1900,确认1900端口未被Windows SSDP服务或其他程序占用,必要时临时停止占用程序。 - 路由器组播设置:部分路由器默认禁用IGMP snooping,需在路由器后台开启该功能,确保组播流量能正常转发到子网内设备。
内容的提问来源于stack exchange,提问作者Neralem
相关产品推荐
相关产品推荐

