ホストマシンによって生成されたUDPブロードキャストパケットを受信するUbuntu仮想マシンがあります。私がネットワークインタフェースeth1またはlo(ローカルループバック)のいずれかにpythonのsocket.bindメソッドを使用してバインドすると、パケットは受信されません。しかし、私が ''(すべてのインタフェースのシンボル)を使用してバインドすると、すべて正常です。私はeth1のアドレスだけにバインドすることができると期待していましたが、これはそうではないようです。誰かがなぜ ''が必要なのか説明できますか?私は仮想マシンを使用しているので、何かファンキーなことが起こっていますか?私は、仮想マシンが私のLAN上の別のマシンのように見えるように、ブリッジネットワーク設定を使用しています。ここでは、コードがあります: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