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-адрес в своем коде.
Этот код недействителен для общения в чате, вы должны использовать разблокирующие сокеты и выбрать модуль или другие асинхронные модули.