我有一台Ubuntu虚拟机正在监听由主机生成的UDP广播数据包。如果我使用python的socket.bind方法绑定到我的网络接口eth1或lo(本地环回),我没有收到任何数据包。但是,如果我使用''(所有接口的符号)绑定,那么一切都很好。我希望能够绑定到eth1的地址,但似乎并非如此。有人可以解释为什么''是必需的吗?有什么奇怪的事情发生,因为我正在使用虚拟机?我正在使用桥接网络设置,因此虚拟机看起来像我局域网中的另一台计算机。下面的代码:接收UDP广播[VirtualBox,Ubuntu,Python]
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
# using the '' address works
sock.bind(('', UDP_PORT))
# using the address of eth1 doesn't
#sock.bind(('192.168.2.123', UDP_PORT))
# and neither does using the local loopback
#sock.bind(('127.0.0.1', UDP_PORT))
while True:
data, addr = sock.recv(2048)
print data
'127.0.0.1'呢? – dav1d
127.0.0.1也不起作用。出于某种原因,它必须是我不明白的地址。我会更改我的代码以使其更清晰一些。 – user975326