[C#] Broadcast-Nachricht von allen Netzwerkadaptern senden


Answers

Wenn Sie Bind () aufrufen, legen Sie den lokalen IP-Endpunkt fest. Verwenden Sie statt IPAddress.Any die IP-Adresse der Netzwerkkarte, von der Sie senden möchten. Sie müssen dies für jede NIC separat durchführen.

Question

Ich habe eine Anwendung, die Broadcast-Nachrichten sendet und auf Antwortpakete lauscht. Unten ist das Code-Snippet.

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
                    );

Beim Ausführen der Anwendung wurde die Broadcast-Nachricht nicht gesendet. Auf meinem Rechner habe ich drei Netzwerkadapter. Einer ist mein lokaler Netzwerkadapter, und zwei andere sind virtuelle VMWare-Netzwerkadapter. Wenn ich meine Anwendung ausführe, kann ich (unter Verwendung von Wireshark Network Capture) sehen, dass die Broadcast-Nachricht von einem der VMWare-Netzwerkadapter gesendet wird.

Ich möchte den Code so ändern, dass die Broadcast-Nachricht von allen Netzwerkadaptern auf dem PC gesendet wird. Was ist der beste Weg, das zu tun?




Sie können IPAddress.Any verwenden, wenn Sie den TCPListener erstellen. Dadurch wird der TCP-Listener an alle Schnittstellen gebunden