Проблема с сервером и клиентом: socket.gaierror: [Erno 11001] Ошибка getaddrinfo - PullRequest
0 голосов
/ 03 февраля 2019

Я новичок в том, как работает сеть, и я пытаюсь написать два сценария для назначения класса, один действует как сервер, а другой - как клиент.Как серверные, так и клиентские сценарии должны выполняться на одном компьютере, и каждый из них использует два разных порта (клиентский порт и порт сервера).Клиент должен иметь возможность отправить сообщение на сервер, а затем получить сообщение обратно, если отправка прошла успешно.Это код клиента:

from socket import *
serverName = 'hostname'
serverPort = 2000
clientSocket = socket(AF_INET, SOCK_DGRAM)
message = input('Input lowercase sentence:')
clientSocket.sendto(message.encode(), (serverName, serverPort))
modifiedMessage, serverAddress = clientSocket.recvfrom(3000)
print(modifiedMessage.decode())
clientSocket.close()

А это код сервера:

from socket import *
serverPort = 2000
serverSocket = socket(AF_INET, SOCK_DGRAM)
serverSocket.bind(('', serverPort))
print("The server is ready to receive")
while True:
   message, clientAddress = serverSocket.recvfrom(3000)
   modifiedMessage = message.decode().upper()
   serverSocket.sendto(modifiedMessage.encode(), clientAddress)

Код сервера работает нормально, но я получаю эту ошибку при запуске кода клиента:

socket.gaierror: [Erno 11001] getaddrinfo failed

В частности, это не нравится

clientSocket.sendto(message.encode(), (serverName, serverPort)

Я видел несколько потоков здесь об этой ошибке, но ни один из них действительно не помог с моей проблемой.Я уже проверил, чтобы убедиться, что оба порта однозначно открыты перед выполнением обоих сценариев, и они открыты.Мое первоначальное предположение состоит в том, что он не может найти реальный порт сервера, даже если он работает и ждет ответа.Так что я в тупике.Что означает эта ошибка и как я могу решить эту проблему?

1 Ответ

0 голосов
/ 03 февраля 2019

Вы забыли подключить клиентский сокет к сокету сервера, прежде чем пытаться отправить сообщение:

from socket import *
serverName = 'localhost'
serverPort = 2000
clientSocket = socket(AF_INET, SOCK_DGRAM)
clientSocket.connect((serverName, serverPort))
message = input('Input lowercase sentence:')
clientSocket.sendto(message.encode(), (serverName, serverPort))
modifiedMessage, serverAddress = clientSocket.recvfrom(3000)
print(modifiedMessage.decode())
clientSocket.close()

Я также изменил имя_сервера на localhost.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...