Python ConnectionRefusedError: [Errno 61] Соединение отклонено

Я видел похожие вопросы, но они я не мог исправить эту ошибку. Я и мой друг создаем программу чата, но мы продолжаем получать ошибку ConnectionRefusedError: [Errno 61] Соединение отклонено. Кстати, мы находимся в разных сетях. Вот мой код для сервера

import socket

def socket_create():
try:

    global host
    global port
    global s
    host = ''
    port = 9999
    s = socket.socket()

except socket.error as msg:
    print("Socket creation error" + str(msg))

#Wait for client, Connect socket and port
def socket_bind():
try:
    global host
    global port
    global s
    print("Binding socket to port: " + str(port)) 
    s.bind((host, port))
    s.listen(5)
except socket.error as msg:
    print("Socket binding error" + str(msg) + "\n" + "Retrying...")
    socket_bind

#Accept connections (Establishes connection with client) socket has to       be listining
def socket_accept():
   conn, address = s.accept()
   print("Connection is established |" + " IP:" + str(address[0]) + "|    port:" + str(address[1]))
chat_send(conn)


def chat_send(conn):
 while True:
    chat =input()
    if len(str.encode(chat)) > 0:
        conn.send(str.encode(chat))
        client_response = str(conn.recv(1024), "utf-8")
    print(client_response)
def main():
socket_create()
socket_bind()
socket_accept()

main()

И мой код клиента

import socket


#connects to server
s = socket.socket()
host = '127.0.0.1'
port = 9999
s.connect((host, port))

#gets chat
while True:
    data = s.recv(1024)
    print (data[:].decode("utf-8")) 
    chat = input()
    s.send(str.encode(chat))

7 ответов

Это может не отвечать на ваш первоначальный вопрос, но я столкнулся с этой ошибкой, и просто я не запустил процесс сервера первым, чтобы прослушать localhost (127.0.0.1) на порте, который я выбрал для тестирования. Чтобы клиент мог подключиться к локальному хосту, сервер должен прослушивать локальный хост.

'127.0.0.1' означает локальный компьютер - значит, клиент соединяется с сервером на одном компьютере. Клиент должен использовать IP с сервера - как 192.168.0.1,

Проверьте на сервере:

в Windows (в cmd.exe)

ipconfig

в Linux (в консоли)

ifconfig

Но если вы находитесь в разных сетях, это может не сработать. ipconfig/ifconfig возвращает локальный IP (как 192.168.0.1) который виден только в локальной сети. Тогда вам может понадобиться внешний IP-адрес и настройки (перенаправления) на вашем маршрутизаторе и маршрутизаторе. внешний IP может быть IP вашего роутера или роутера провайдера. Вы можете видеть свой внешний IP при посещении таких страниц, как этот http://httpbin.org/ip. Но это все еще может потребовать некоторой работы, если это не будет большой проблемой.

Вам нужно просто сначала запустить сервер, а затем запустить client_code. В VS Code я открыл 2 терминала. Один для запуска server_codeWhile True, а другой для client_code

Если вы подключаетесь к хосту: порт, который открыт, но к нему не привязана служба, вы можете увидеть этот IIRC. Например, с ssh вы иногда видите это при попытке подключиться к серверу, который загружается, но sshd не работает.

Так что это может не решить ваш вопрос конкретно, но это исправило мой, и это может помочь кому-то еще, я работаю с vscode, и я использую некоторое расширение, которое запускает мой код, поэтому, когда вы хотите запустить свой сервер, запустите его на своем CMD или терминале и запустите свой клиент в vscode это помогло мне (может быть, важно, что я работаю на Mac, поэтому, возможно, проблема с конкретной ОС)

это случилось и со мной. попробуйте проверить свой IP-адрес в настройках и измените свой IP-адрес в своем коде.

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

Другие вопросы по тегам