我有一个C# .NET客户端,它侦听 UDP 多播消息。我需要在单个网络接口上接收消息。有时我看不到收到的消息。当我禁用其他接口时,它可以工作。
我尝试使用本网站上类似问题的代码将套接字选项设置为特定接口,但是,我不确定这是否仅影响发送多播消息而不接收它们?
经过我的研究,我发现路由表会导致这种行为,一种解决方案是更改路由表,但我不想走那条路。
在所有接口上加入组播组是否更好?我将如何使用UdpClient做到这一点。
这是用于设置我的UdpClient的代码:
获取接口:
public static IEnumerable<NetworkInterface> GetAvailableMulticastInterfaces()
{
NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
List<NetworkInterface> availableInterfaces = new List<NetworkInterface>();
foreach (NetworkInterface adapter in nics)
{
IPInterfaceProperties ip_properties = adapter.GetIPProperties();
if (!adapter.GetIPProperties().MulticastAddresses.Any())
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
availableInterfaces.Add(adapter);
}
return availableInterfaces;
}
设置界面:
NetworkInterface networkInterface = Common.Utilities.Network.GetAvailableMulticastInterfaces().Where(nic => nic.Id == attributes.SelectedNetworkInterfaceId).FirstOrDefault();
获取接口索引:
networkInterfaceIndex = (int)IPAddress.HostToNetworkOrder(networkInterface.GetIPProperties().GetIPv4Properties().Index);
千万里不及你
相关分类