Подтвердить что ты не робот

Python отправляет пакет UDP

Я пытаюсь написать программу для отправки UDP-пакетов, как в https://wiki.python.org/moin/UdpCommunication. Код находится в Python 2:

import socket

UDP_IP = "127.0.0.1"
UDP_PORT = 5005
MESSAGE = "Hello, World!"

print "UDP target IP:", UDP_IP
print "UDP target port:", UDP_PORT
print "message:", MESSAGE

sock = socket.socket(socket.AF_INET, # Internet
             socket.SOCK_DGRAM) # UDP
sock.sendto(MESSAGE, (UDP_IP, UDP_PORT))

Если я поставлю скобки вокруг печатных материалов, он просто распечатает их на экране.

Что мне нужно сделать, чтобы сделать эту работу?

4b9b3361

Ответ 1

С Python3x вам нужно преобразовать строку в необработанные байты. Вам нужно будет закодировать строку как байты. По сети вам нужно отправить байты, а не символы. Вы правы, что это будет работать для Python 2x, поскольку в Python 2x, socket.sendto на сокет принимает "обычную" строку, а не байты. Попробуйте следующее:

print("UDP target IP:", UDP_IP)
print("UDP target port:", UDP_PORT)
print("message:", MESSAGE)

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP
sock.sendto(bytes(MESSAGE, "utf-8"), (UDP_IP, UDP_PORT))

Ответ 2

Ваш код работает как есть для меня. Я проверяю это, используя netcat в Linux.

Используя netcat, я могу сделать nc -ul 127.0.0.1 5005, который будет прослушивать пакеты по адресу:

  • IP: 127.0.0.1
  • Порт: 5005
  • Протокол: UDP

При этом здесь вывод, который я вижу при запуске script, при запуске netcat.

[9:34am][[email protected] ~] nc -ul 127.0.0.1 5005
Hello, World!

Ответ 3

Если вы используете python 3, вам нужно изменить операторы печати на функции печати, т.е. поместить вещи в скобки() после операторов печати. ​​

Единственное, что вы увидите выше, это отпечатки, если у вас нет чего-то прослушивающего 127.0.0.1 port 5005, поскольку вы отправляете пакет, не получая его, поэтому вам нужно реализовать и запустить другую часть примера в другом окне консоли сначала, чтобы он ожидал сообщения.