Первый компьютер не получает пакет UDP, отправленный со второго компьютера

Сегодня я пытался модуль сокета Python, но мне не удалось отправить/получить с одного компьютера на другой.

Сначала я пытался делать все на одном ПК:

Приемник:

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
ip = socket.gethostbyname(socket.gethostname())
port = 5003
s.bind((ip, port))
while True:
    data, addr = s.recvfrom(1024)
    print(data, addr)

Датчик:

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
ip = # I wrote ip manually from socket.gethostbyname(socket.gethostname())
port = 5003
s.sendto("Hello!", (ip, port))

Выполнение первого сценария в первой командной строке и других на втором, на одном компьютере, будет работать нормально. Но делать с одного компьютера на другой не буду.

Всякий раз, когда я выполнял Receiver script на первом компьютере, и Sender script на втором компьютере, не было никаких обновлений, первый компьютер не мог получить пакет.

Также отправка пакетов с PC2 на PC1 работает, но не наоборот.
Операционная система:

PC2 = Windows 8.1 64 бит;
PC1 = Mac OS X El Capitan 10.11.1 64 бит;

Я также попытался добавить исходящее правило в Брандмауэр Windows, разрешив все подключения для определенного порта.


В чем может быть проблема? Это из-за брандмауэра? Если нет, то я делаю это неправильно?

1 ответ

  1. Найти проблему:

    Короткие:

    socket.gethostbyname(socket.gethostname()) содержит IPv4адрес VirtualBox. Адаптер беспроводной локальной IPv4сети был другим и получал UDP-пакет.

    Длинный:

    Я искал адрес адаптера беспроводной локальной IPv4ipconfigsocket.gethostbyname(socket.gethostname())сети , но оказалось, что
    socket.gethostbyname(socket.gethostname())даст адрес хост-сети VirtualBox.

    Когда я пинговал VMIPv4, он давал запрос тайм-аута, но после пинга real local IPv4он действительно работал.

    Устанавливать:

    Когда oracle virtualbox установлены, как получить локальный ip-адрес в python