У меня есть довольно стандартная простая демонстрация для пакетов udp, но я получаю сообщение об ошибке при попытке отправить на другой IP-адрес, и я действительно не понимаю, почему.
socketerror: [Errno 22] Неверный аргумент
Код, который, как я думал, будет работать, в основном....
Сервер
def Main():
host = '0.0.0.0'
port = 20030
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind((host,port))
#Then it prints incoming data and sends it back to client.
data,addr = s.recvfrom(1024)
s.close()
Клиент
def Main():
host = '127.0.0.1'
port = 20020
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind((host,port))
server = ('10.20.64.115', 20030)
#loop for input to send to server.
s.sendto(message, server)
s.close()
Если я запускаю их оба на одном компьютере и host = 127.0.0.1 на обоих, оба привязаны к 127.0.0.1, а s.sendto(message, server) отправляет на 127.0.0.1, они могут отправлять сообщения обратно и без проблем.
Если я запускаю их на разных компьютерах, я считаю, что должен использовать клиент для отправки на IP-адрес IP-адреса сервера, но я получаю [Errno 22].
Поэтому я попытался привязать клиента к 192.0.0.1, который выдал [Errno 99], не может назначить запрошенный адрес.
Я попытался привязать клиента к 0.0.0.0, а адрес sendto к 10.20.64.115, но клиент просто возвращается к новой строке, и сервер ничего не видит.
Во всех учебниках говорится о привязке и отправке на 127.0.0.1, поэтому я установил это на обоих компьютерах, и он также не отображается на сервере.
Так что я теперь весь в замешательстве. Исправьте все недоразумения...
bind(IP-адрес, который вы хотите слушать, порт, который вы хотите слушать)
sendto(сообщение, IP-адрес, на который вы хотите отправить, порт, на который вы хотите отправить)
0.0.0.0 слушает все.
192.0.0.1 слушает роутер.
127.0.0.1 слушает только компьютер.
Если да, то какой IP-адрес мне нужно отправить, чтобы избежать ошибки 22 и успешно отправить сообщение на сервер? Или я что-то пропустил с розетками?