Я пытаюсь реализовать простую программу обмена мгновенными сообщениями TCP в Python, используя модуль сокета. Когда я использую значение, возвращаемое socket.gethostname()
в connect()
, клиент отлично работает при подключении к серверу обмена мгновенными сообщениями, работающему на локальном хосте. Однако клиент возвращает ошибку 111 (отказ в соединении), когда я использую значение, возвращаемое socket.gethostbyname("localhost")
. Есть ли способ решить эту проблему?
Программа обмена мгновенными сообщениями Python не может подключиться с ошибкой 111
Ответы (1)
Если вы получаете 111 при попытке connect
, это обычно означает, что на этом хосте и порту ничего не прослушивается.
Обычно проще проверить это с помощью однострочника с помощью netcat
(который у вас, вероятно, встроен в на любой платформе, кроме Windows, и может быть легко получено, если вы этого не сделаете), или telnet
, если необходимо:
abarnert$ nc -v localhost 111
nc: connect to localhost port 111 (tcp) failed: Connection refused
nc: connect to localhost port 111 (tcp) failed: Connection refused
nc: connect to localhost port 111 (tcp) failed: Connection refused
Поскольку netcat не может подключиться, проблема не в вашем клиенте Python, а в том, что не к чему подключаться.
Это означает, что ваш сервер не прослушивает localhost:111.
Не зная ничего о вашем сервере, кроме краткого упоминания, невозможно поставить диагноз, но мое первое предположение будет заключаться в том, что вы выполняете bind((gethostname(), 111))
, что означает, что он в конечном итоге прослушивает, скажем, 10.0.0.3:111
.
Если вы хотите прослушивать все хосты и интерфейсы, есть причудливые способы указать это, но самый простой способ:
serversocket.bind(('', 111))
localhost
. Вы можете проверить это с помощью netcat или telnet, например,nc localhost 111
. Не зная ничего о вашем сервере, кроме краткого упоминания, невозможно поставить диагноз, но мое первое предположение будет заключаться в том, что вы делаетеbind((gethostname(), 111))
вместоbind('', 111)
или что-то подобное. - person abarnert   schedule 04.01.2013