Possiedo una macchina virtuale Ubuntu che ascolta i pacchetti broadcast UDP generati dalla macchina host. Se eseguo il binding a una delle mie interfacce di rete eth1 o lo (loopback locale) utilizzando il metodo socket.bind di python, non ricevo alcun pacchetto. Se, tuttavia, lego usando '' (il simbolo per tutte le interfacce) allora tutto va bene. Mi aspetterei che fosse possibile associare solo l'indirizzo di eth1, ma questo non sembra essere il caso. Qualcuno potrebbe spiegare perché è richiesto "? C'è qualcosa di funky in corso perché sto usando una macchina virtuale? Uso una configurazione di rete a ponte in modo che la macchina virtuale assomigli a un'altra macchina sulla mia LAN. Ecco il codice:Ricezione trasmissione 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
che dire di '127.0.0.1'? – dav1d
127.0.0.1 non funziona neanche. Per qualche ragione deve essere l'indirizzo che è quello che non capisco. Cambierò il mio codice per essere un po 'più chiaro. – user975326