c# - tarjeta - descargar driver de wifi para windows 7 64 bits
Enviar mensaje de difusión desde todos los adaptadores de red (4)
Cuando llama a Bind (), está configurando el punto final de IP local. En lugar de usar IPAddress.Any, use la dirección IP de la NIC desde la que desea enviar. Tendrá que hacer esto por separado para cada NIC.
Tengo una aplicación que envía mensajes de difusión y escucha los paquetes de respuesta. A continuación se muestra el fragmento de código.
m_socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
m_socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
m_socket.Bind(new IPEndPoint(IPAddress.Any, 2000));
m_socket.BeginSendTo(
buffer,
0,
buffer.Length,
SocketFlags.None,
new IPEndPoint(IPAddress.Broadcast, 2000),
Callback),
null
);
Cuando ejecuto la aplicación, el mensaje de difusión no se envió. En mi máquina tengo tres adaptadores de red. Uno es mi adaptador de red local y otros dos son adaptadores virtuales de red VMWare. Cuando ejecuto mi aplicación, puedo ver (utilizando la captura de red wireshark) que el mensaje de difusión se envía desde uno de los adaptadores de red de VMWare.
Me gustaría modificar el código para que el mensaje de difusión se envíe desde todos los adaptadores de red en la PC. ¿Cuál es la mejor manera de hacer eso?
Puede usar lo siguiente para obtener todas sus direcciones IP (y mucho más). De modo que puede iterar a través de la lista y vincular (como dijo Jon B) a la IP específica que desea cuando envía su multidifusión.
foreach (var i in System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces())
foreach (var ua in i.GetIPProperties().UnicastAddresses)
Console.WriteLine(ua.Address);
Puede usar IPAddress.Any al construir el tcpListener. Esto vinculará al oyente tcp con todas las interfaces
Mira esto http://salaam.codeplex.com/ Mi amigo y yo desarrollamos una biblioteca de clases llamada Salaam. descargue el código fuente o use los binarios (.dll) para usarlo.