#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?