You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 13:00:11