Gerade das gleiche Problem erfahren, und wollte teilen, was es für mich behoben.
Kurz gesagt: es scheint, dass Windows-Firewall irgendwie die Ursache für dieses seltsame Verhalten war, und nur die Deaktivierung des Dienstes hilft nicht. Sie müssen eingehende UDP-Pakete explizit für bestimmte Programme (ausführbare Dateien) in der Eingangsliste für eingehende Windows-Firewall zulassen.
Für vollständige Fallbeschreibung, lesen Sie weiter.
Mein Netzwerk-Setup ist: IP meiner (empfangenden) Maschine war 192.168.1.2, IP der sendenden Maschine war 192.168.1.50 und Subnetzmaske auf beiden Maschinen war 255.255.255.0. Mein Computer läuft Windows 7 x64.
Dies ist der Code (grob), die ich verwendet:
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);
Zunächst dies nicht funktionierte, wenn ich ein Broadcast-Paket von dieser Buchse gesendet, bevor ich ReceiveFrom
auf es nennen. I.e. diese Zeile vor ReceiveFrom
Gespräch hinzugefügt:
sock.SendTo(someData, new IPEndPoint(IPAddress.Broadcast, somePort))
Wenn ich von Aufnahmebuchse, ankommenden Broadcast-Pakete zunächst nicht das Broadcast-Paket senden wurden von ihm nicht erhalten, auch wenn sie in Wireshark (Ziel der Pakete erschienen war 255.255. 255.255).
Ich dachte, dass es sieht aus wie Firewall mit eingehenden Paketen Unordnung (es sei denn, eine Art von UDP-Loch wird zuerst von ausgehenden Paket geöffnet - obwohl ich noch nicht gehört habe, dass UDP Lochung gilt für Broadcast-Pakete irgendwie) Ich ging zu Diensten und deaktivierte Windows Firewall Service insgesamt. Das hat nichts verändert.
Nachdem ich jedoch alles andere versucht habe, habe ich den Firewall-Dienst erneut aktiviert und versucht, das Programm erneut auszuführen. Dieses Mal erschien eine Firewall-Eingabeaufforderung, in der ich gefragt wurde, ob ich den MyProgram.vshost.exe-Prozess (ich debuggte in Visual Studio) durch die Firewall zulassen wollte, ich akzeptierte ihn und voila - alles funktionierte! Eingehende Pakete wurden jetzt empfangen!
Können Sie den Code posten, den Sie zum Abhören der Pakete verwenden? – tomasmcguinness
Ich habe versucht, den Code von http://codeidol.com/csharp/csharp-network/IP-Multicasting/What-Is-Broadcasting/ und http://www.java2s.com/Code/CSharp/Network/ReceiveBroadcast. htm und auch http://stackoverflow.com/questions/746519/udpclient-receive-on-broadcast-address – Boris
eine aktive Firewall? Ich bin mir nicht sicher, wo Wireshark die Pakete abfängt, aber es könnte sein, dass die Firewall sie danach stoppt. – Default