W zależności od tego, co robisz, jest to metoda Win32, które mogą pomóc. Zwróci najlepszy interfejs dla danego adresu IP. Aby otrzymać jedną domyślną (The 0.0.0.0), która jest zwykle to, co chcesz dla multicast, to całkiem proste:
P/Invoke podpis:
[DllImport("iphlpapi.dll", CharSet = CharSet.Auto)]
private static extern int GetBestInterface(UInt32 DestAddr, out UInt32 BestIfIndex);
Potem gdzieś indziej:
// There could be multiple adapters, get the default one
uint index = 0;
GetBestInterface(0, out index);
var ifaceIndex = (int)index;
var client = new UdpClient();
client.Client.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastInterface, (int)IPAddress.HostToNetworkOrder(ifaceIndex));
var localEndpoint = new IPEndPoint(IPAddress.Any, <port>);
client.Client.Bind(localEndpoint);
var multicastAddress = IPAddress.Parse("<group IP>");
var multOpt = new MulticastOption(multicastAddress, ifaceIndex);
client.Client.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, multOpt);
var broadcastEndpoint = new IPEndPoint(IPAddress.Parse("<group IP>"), <port>);
byte[] buffer = ...
await client.SendAsync(buffer, buffer.Length, broadcastEp).ConfigureAwait(false);
znalazłeś rozwiązanie? Mam ten sam problem. Czy artykuł o MSDN rozwiązał Twój problem? – Gobliins
dla mnie to nie było – Gobliins
@Gobliins Nie działało również dla mnie:/Jakieś rozwiązanie? – J4N