Acabo de experimentar el mismo problema, y quería compartir lo que lo solucionó.
En pocas palabras: parece que Windows Firewall fue de alguna manera la causa de este comportamiento extraño, y simplemente deshabilitar el servicio no ayuda. Tiene que permitir explícitamente paquetes UDP entrantes para un programa específico (ejecutable) en la lista de reglas de entrada de Firewall de Windows.
Para la descripción completa del caso, siga leyendo.
La configuración de mi red es: la IP de mi máquina (receptora) era 192.168.1.2, la IP de la máquina que enviaba era 192.168.1.50, y la máscara de subred en ambas máquinas era 255.255.255.0. Mi máquina ejecuta Windows 7 x64.
Este es el código (o menos) que utilicé:
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 0);
sock.Bind(iep);
sock.EnableBroadcast = true;
EndPoint ep = (EndPoint)iep;
byte[] buffer = new byte[1000];
sock.ReceiveFrom(buffer, ref ep);
Inicialmente esto no funciona, a menos envié un paquete de difusión de ese socket antes de que llame ReceiveFrom
en él. Es decir. añadiendo esta línea antes ReceiveFrom
llamada:
sock.SendTo(someData, new IPEndPoint(IPAddress.Broadcast, somePort))
Cuando no haya enviado el paquete de difusión en primer lugar de la recepción de zócalo, los paquetes de difusión entrantes no fueron recibidos por ella, a pesar de que aparecieron en Wireshark (destino de los paquetes era 255.255. 255.255). Creo que parece que el firewall está jugando con paquetes entrantes (a menos que algún tipo de agujero UDP se abra primero por paquete saliente, aunque no he oído antes que la perforación UDP se aplique a paquetes de difusión de alguna manera), Fui a los servicios y desactivé por completo el servicio de firewall de Windows. Esto no cambió nada.
Sin embargo, después de probar todo lo demás, volví a habilitar el servicio de firewall e intenté ejecutar el programa nuevamente. Esta vez, el mensaje del firewall apareció preguntándome si quería permitir el proceso MyProgram.vshost.exe (estaba depurando en Visual Studio) a través del firewall, lo acepté y listo, ¡todo funcionó! ¡Los paquetes entrantes se estaban recibiendo ahora!
¿Puedes publicar el código que estás usando para escuchar los paquetes? – tomasmcguinness
Probé el código de: http://codeidol.com/csharp/csharp-network/IP-Multicasting/What-Is-Broadcasting/ y http://www.java2s.com/Code/CSharp/Network/ReceiveBroadcast. htm y también http://stackoverflow.com/questions/746519/udpclient-receive-on-broadcast-address – Boris
¿algún firewall activo? No estoy seguro de dónde intercepta Wireshark los paquetes, pero podría ser que el firewall los detenga después – Default