Dependiendo de lo que está haciendo, hay un método Win32 que podría ayudar. Devolverá la mejor interfaz para una dirección IP determinada. Para obtener el uno por defecto (la 0.0.0.0), que suele ser lo que quiere para multidifusión, que es bastante fácil:
P/Invoke firma:
[DllImport("iphlpapi.dll", CharSet = CharSet.Auto)]
private static extern int GetBestInterface(UInt32 DestAddr, out UInt32 BestIfIndex);
Luego en otro lugar:
// 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);
¿Encontró una solución? Tengo el mismo problema. ¿El artículo en MSDN resolvió su problema? – Gobliins
para mí no lo hizo – Gobliins
@Gobliins No funcionó para mí también:/¿Alguna solución? – J4N