Ошибка Win 10061 Не удалось установить соединение, поскольку целевая машина активно отказалась от него

Я экспериментировал с библиотекой сокетов для python. Я сделал простую программу для сервера и клиента, где клиент может отправлять сообщения серверу.

Вот мой код для сервера:

import socket

print("Host")

socket_main = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket_main.bind(('127.0.0.1', 9999))

socket_main.listen(1)
conn, addr = socket_main.accept()

while True:
    data = conn.recv(1204).decode()
    print(data)

conn.close()

Вот мой код для клиента

import socket

print("Client")

socket_main = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket_main.connect(('127.0.0.1', 9999))

while True:
    message = input(": ")
    socket_main.send(message.encode())

socket_main.close()

Когда я запускаю эти программы в двух разных терминалах на одном компьютере, все работает нормально, но когда я пытаюсь запустить сервер и клиент на разных компьютерах, я получаю сообщение об ошибке на стороне клиента: «Не удалось установить соединение, потому что целевая машина активно отказывался от него».

Я пробовал несколько раз менять порт, но это не помогло. Я просмотрел много других форумов, и я не мог решить эту проблему некоторое время, поэтому я решил спросить здесь.

@WardenUnleashed, который также не будет работать в сети

Remy Lebeau 19.03.2022 06:15

Я неправильно прочитал. Не видел, что они пытались подключить кросс-сети!

WardenUnleashed 19.03.2022 06:26
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
113
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

when I try to run the server and client on different computers I get an error on the clients end

Это потому, что вы используете127.0.0.1 с обеих сторон. Это IP-адрес замыкания на локальном хосте. Он работает, когда клиент и сервер находятся на одном компьютере, но не маршрутизируются в сети LAN.

Тебе нужно:

  • измените сервер для прослушивания либо 0.0.0.0 (для прослушивания всех установленных сетевых интерфейсов), либо его фактический IP-адрес в локальной сети (только сетевой интерфейс, подключенный к локальной сети).

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

I have tried changing the port multiple times but it didn't help

Проблема не с портом, а с IP-адресом.

Вы имеете в виду выполнение этого на сервере: socket_main.bind(('0.0.0.0', 9999)), а это на клиенте: socket_main.connect((socket.gethostname(), 9999))

sashasmol26 19.03.2022 06:43

@ sashasmol26 да для сервера, нет для клиента. socket.gethostname() возвращает имя хоста локального компьютера, поэтому вызов этого на клиентском компьютере вернет имя хоста клиента, а не сервера. Но вы можете заставить сервер отображать результат gethostname(), а затем ввести это значение в клиент.

Remy Lebeau 19.03.2022 06:46

Да, это работает, спасибо

sashasmol26 19.03.2022 07:02

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