从 C# 向 Python 广播 UDP 消息

Broadcasting UDP message from C# to Python

我正在尝试从一台机器上的 C# 应用程序向另一台机器上的 Python 脚本发送广播消息。如果我指定 Python 机器的 IP 作为我的端点,我可以很好地发送消息。以下是我发送消息的方式:

const int PORT = 12345;
using (var sock = new UdpClient())
{
    var endpoint = new IPEndPoint(IPAddress.Parse(remoteIP), PORT);
    //var endpoint = new IPEndPoint(IPAddress.Broadcast, PORT);

    byte[] bytes = Encoding.UTF8.GetBytes("hello, world!");
    sock.Send(bytes, bytes.Length, endpoint);
}

在Python这边,我收到如下:

import socket
PORT = 12345

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(('', PORT))
#sock.bind(('<broadcast>', PORT))

while 1:
    data,addr = sock.recvfrom(1024)
    if not data: break
    print(data)

我可以成功地将消息从一台机器发送到另一台机器。但是,我有多台机器我希望我的消息去(UDP 广播),但是当我使用 IPAddress.Broadcast 作为我的端点时,Python 没有收到我的消息。我也试过将我的 Python 套接字绑定到 <broadcast>,但这没有帮助,绑定到我的 C# 机器的 IP 给我错误 socket.gaierror: [Errno -3] Temporary failure in name resolution.

我不知道这是 C# 没有发送广播还是 Python 没有收到广播的问题。

您可以使用 Wireshark 等网络分析器来验证网络代码的运行情况。我怀疑如果你这样做,你会发现实际上没有设置广播数据报。

您的套接字缺少 a good, complete code example it's hard to say for sure what the reason would be. But the cause of this would most likely be because you have not set the Socket.EnableBroadcast 属性。默认为false,如果不设置为true,即使发送到广播地址也不会发送广播数据报。