Проблема с sendto при многократной отправке (Python) - PullRequest
0 голосов
/ 23 октября 2018

Я пытаюсь отправить сообщение всем соседним узлам в сети, и выполняется следующий цикл:

Однако сеть выдает ошибку - Файл "Send.py" в

 sent = sock.sendto(data.serialize(), (destinationIp, 5000))

socket.gaierror: [Errno -2] Имя или служба неизвестны

for node in nodes:
    destinationIp = node.ip

    data = constructPacket()
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    sent = sock.sendto(data.serialize(), (destinationIp, 5000))
    sock.close()

Может кто-нибудь подсказать, почему это может происходить?Я дважды проверил используемые ips, и они законны.

1 Ответ

0 голосов
/ 23 октября 2018

Во-первых, не создавайте сокет во время каждой итерации, для лучшей практики попробуйте такой подход:

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
for node in nodes:
    destinationIp = node.ip
    data = constructPacket()
    sent = sock.sendto(data.serialize(), (destinationIp, 5000))
sock.close()

Во-вторых, убедитесь, что node.ip возвращает действительный IP-адрес (socket.gaierror означает недопустимое имя хоста).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...