Сокеты Python udp в Windows (не могут отправить сообщение на сервер, если запустили его в command promt (в IDE отправка выполняется нормально))

#python #sockets #udp

#python #сокеты #udp

Вопрос:

У меня проблема с сокетной связью в моем приложении Python. Я использую python32. ОС Windows 7. В моей задаче я должен использовать UDP-сокеты. Если я запустил свое приложение из IDE (Eclipse), связь между клиентом и сервером в порядке.

НО: если я запустил свое приложение в Command Promtp, а затем я не могу связаться с клиентом на сервер (ошибка 11004 getaddrinfo не удалась). В Windows xp приложение работает нормально. Я пытаюсь отключить брандмауэр, но это не помогает. Почему я не могу связаться с cmd?

Клиентское соединение:

 try:
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.settimeout(15)
except socket.error as msg:
    print(msg)
    s.close()
    s = None

addr=(HOST,int(PORT))
msg="CONNECT"
s.sendto(bytes(msg,"ascii"),addr)
try:
    data = s.recvfrom(1024)[0]
except socket.timeout as err:
    print("Connection lost! /cry")
    sys.exit(1)
  

и серверный код:

 try:
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
except socket.error as msg:
    print(msg)
    s = None

s.settimeout(45)
s.bind(('0.0.0.0',PORT))

if s is None:
    print('could not open socket')
    sys.exit(1)
print("Server created. Waiting for player.")
sost = "Server"
while True:
    try:
        (data,addr) = s.recvfrom(1024)
    except socket.timeout as err:
        print("Nobody want's to connect! /cry")
        sys.exit(1)

    if data == b"CONNECT":
        print("User from {0} connected".format(addr))
        s.sendto(b"CONNECT_OK",addr)
    break;
  

PS: Извините за мой английский 🙂

Ответ №1:

можете ли вы распечатать значение переменной addr при получении исключения? может быть, что-то глупое с адресом (встроенный перевод строки или что-то в этом роде)

Вероятно, безопаснее добавить вызов addr.strip()?

Комментарии:

1. Спасибо! Я не могу представить, что проблема в этом, потому что в XP и в отладчике все работает нормально. ADDR состоит из (‘10.20.213.5 r’, 43212). Но почему добавлен » r»?

2. Вы получаете этот адрес из пользовательского ввода? Окончания строк иногда могут быть неприятными…

3. как вы получаете значение HOST?