Mam urządzenie wirtualne Ubuntu nasłuchujące pakietów rozgłaszania UDP, które są generowane przez maszynę hosta. Jeśli połączę się z jednym z moich interfejsów sieciowych eth1 lub lo (local loopback) przy użyciu metody socket.bind Pythona, nie otrzymuję żadnych pakietów. Jeśli jednak wiążę za pomocą "" (symbol dla wszystkich interfejsów), wszystko jest w porządku. Spodziewałbym się, że można powiązać tylko adres eth1, ale nie wydaje się, żeby tak było. Czy ktoś mógłby wyjaśnić, dlaczego "" jest wymagany? Czy jest coś ciekawego, ponieważ korzystam z wirtualnej maszyny? Używam konfiguracji sieci zmostkowanej, więc maszyna wirtualna wygląda jak inna maszyna w mojej sieci LAN. Oto kod:Odbieranie transmisji 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
co z '127.0.0.1'? – dav1d
127.0.0.1 również nie działa. Z jakiegoś powodu musi to być adres, którego nie rozumiem. Zmienię swój kod, żeby był nieco jaśniejszy. – user975326