Установление UDP-связи с питоном - PullRequest
0 голосов
/ 07 мая 2018

Итак, у меня есть этот код здесь. Этот скрипт отправителя дает мне вывод правильно.

import socket

UDP_IP = "127.0.0.1"
UDP_PORT = 0
MESSAGE = "Hi, can you listen to this?"

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))

Я попытался использовать этот скрипт на другом хосте и попытаться установить связь между ними. (Обе системы находятся в одной сети, например, 00.000.00.xxx, меняется только часть xxx)

import socket

UDP_IP = "127.0.0.1"
UDP_PORT = 0

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

while True:
    data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
    print "received message:", data

Вот вывод

Traceback (most recent call last):
  File "C:/Users/bshivaku/Desktop/SEnd_Udp_packets.py", line 9, in <module>
    sock.bind((UDP_IP, UDP_PORT))
  File "C:\Python27\Lib\socket.py", line 228, in meth
    return getattr(self._sock,name)(*args)
socket.error: [Errno 10049] The requested address is not valid in its context

Я использовал IP-адрес получателя в сценарии отправителя и отправителя IP-адреса в получателя Я уверен, что допустил ошибку с UDP_PORT , поэтому я использовал PORT = 0 и попробовал. Как запросить номер порта? Как мне установить соединение? Если не порт, то где я ошибаюсь?

1 Ответ

0 голосов
/ 07 мая 2018

При отправке сообщения используйте определенный порт, например, UDP_PORT=8765, в противном случае, если для UDP_PORT установлено значение 0, система выберет для вас случайный порт.

Используйте IP-адрес хоста получателя в скрипте отправителя и привязайте к любому интерфейсу в скрипте получателя.

На принимающей стороне использовать тот же номер порта UDP, который настроен в сценарии отправителя.

приемник:

import socket
UDP_IP = "0.0.0.0"
UDP_PORT = 8543

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

while True:
    data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
    print "received message:", data

Отправитель:

import socket

UDP_IP = "<ip_address_of_receiver>"
UDP_PORT = 8543
MESSAGE = "Hi, can you listen to this?"

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))

Помимо настройки адресов UDP, на стороне Python проблем нет.

Об ошибке:

[Errno 10049] The requested address is not valid in its context

Обычно это происходит из-за попытки привязаться к адресу, который недопустим для локального компьютера: поэтому кажется, что адрес обратной связи 127.0.0.1 не настроен на вашем компьютере.

Расследуйте на стороне системного администратора, например, проверьте, включен ли на вашем компьютере сетевой стек IPv4.

...