我正在尝试将UDP数据报广播到本地网络上的多播地址。 除了一台特定的机器外,这种机器在几十台机器上运行得非常好 此特定计算机能够从多播地址接收数据报,但无法发送消息。
这是我正在使用的代码:
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
的同一台计算机上的环回收到消息 。client.BroadcastEnabled = true;
。BeginSend
代替Send
。欢迎任何调试的想法。
答案 0 :(得分:0)
具有讽刺意味的是,在搜索了一整天的解决方案之后,我发现了SO问题后2分钟。
this文章中的方法有所帮助。我想有一些我不知道的网络接口。
这是修订后的代码:
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();
}