我试图将一台计算机上的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的问题。
答案 0 :(得分:1)
您可以使用Wireshark等网络分析仪来验证网络代码的运行情况。我怀疑如果你这样做,你会发现实际上没有设置广播数据报。
缺乏a good, complete code example很难确定原因是什么。但原因很可能是因为您没有为套接字设置Socket.EnableBroadcast
属性。默认为false
,如果未设置为true
,即使您发送到广播地址,也不会发送广播数据报。