将C#中的UDP消息广播到Python

时间:2015-02-03 22:17:13

标签: c# python udp broadcast

我试图将一台计算机上的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的问题。

1 个答案:

答案 0 :(得分:1)

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

缺乏a good, complete code example很难确定原因是什么。但原因很可能是因为您没有为套接字设置Socket.EnableBroadcast属性。默认为false,如果未设置为true,即使您发送到广播地址,也不会发送广播数据报。