C# UDP多播问题的疑难解答
我正在尝试将UDP数据报广播到本地网络上的多播地址。 除了一台特定的机器之外,这在几十台机器上都能很好地工作。C# UDP多播问题的疑难解答,c#,sockets,udp,multicast,udpclient,C#,Sockets,Udp,Multicast,Udpclient,我正在尝试将UDP数据报广播到本地网络上的多播地址。 除了一台特定的机器之外,这在几十台机器上都能很好地工作。 此特定机器能够从多播地址接收数据报,但不能发送消息 这是我正在使用的代码: using (UdpClient client = new UdpClient()) { client.Send(bytes, bytes.Length, remoteEP); client.Client.Shutdown(SocketShutdown.Both); client.Cli
此特定机器能够从多播地址接收数据报,但不能发送消息 这是我正在使用的代码:
using (UdpClient client = new UdpClient())
{
client.Send(bytes, bytes.Length, remoteEP);
client.Client.Shutdown(SocketShutdown.Both);
client.Client.Close();
}
其中,remoteEP
是多播组的IP地址和端口,bytes
是有效数据
- 没有引发异常,消息根本没有传递
- 消息在同一台机器上的环回中从
接收127.0.0.1
- 消息在Wireshark传出流量中未显示
- 该计算机是网络中唯一运行Windows 8的计算机
- Windows防火墙已禁用
- 该计算机与侦听计算机位于同一子网中
- 此计算机上只有一个活动的网络接口
- 我试过:
client.BroadcastEnabled=true代码>
- 在客户端加入多播组
- 使用
而不是BeginSend
Send
任何关于调试的想法都是欢迎的。具有讽刺意味的是,在搜索了一整天的解决方案后,我在发布了一个SO问题2分钟后发现了它 文章中的方法有所帮助。我猜有一些我不知道的网络接口 这是修订后的守则:
using (UdpClient client = new UdpClient())
{
NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface adapter in nics)
{
IPInterfaceProperties ip_properties = adapter.GetIPProperties();
if (adapter.GetIPProperties().MulticastAddresses.Count == 0)
continue; // most of VPN adapters will be skipped
if (!adapter.SupportsMulticast)
continue; // multicast is meaningless for this type of connection
if (OperationalStatus.Up != adapter.OperationalStatus)
continue; // this adapter is off or not connected
IPv4InterfaceProperties p = adapter.GetIPProperties().GetIPv4Properties();
if (null == p)
continue; // IPv4 is not configured on this adapter
client.Client.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastInterface, (int)IPAddress.HostToNetworkOrder(p.Index));
break;
}
client.Send(bytes, bytes.Length, remoteEP);
client.Client.Shutdown(SocketShutdown.Both);
client.Client.Close();
}