【发布时间】:2015-02-03 22:17:13
【问题描述】:
我正在尝试将广播消息从一台机器上的 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 没有接收到它的问题。
【问题讨论】: