我有一臺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