Брандмауэр не позволяет моему клиентскому приложению python подключаться к серверу, работающему на моем компьютере, даже после того, как я полностью отключил брандмауэр - PullRequest
1 голос
/ 19 июня 2020

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

Вот код сервера:

 import socket

 HOST = '127.0.0.1'  # Standard loopback interface address (localhost)
 PORT = 65432        # Port to listen on (non-privileged ports are > 1023)

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen()
conn, addr = s.accept()
with conn:
    print('Connected by', addr)
    while True:
        data = conn.recv(1024)
        print(data)

Вот код моего клиентского приложения:

 import socket

 HOST = "localhost" # The server's hostname or IP address
 PORT = 65432        # The port used by the server

 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
     s.connect((HOST, PORT))
     s.sendall(b'Hello, world')
     data = s.recv(1024)

 print('Received', repr(data))

Вот мое сообщение об ошибке:

 ConnectionRefusedError: [WinError 10061] No connection could be made because the target machine actively refused it

Вот то, что я пробовал до сих пор:

  1. Полное отключение моего брандмауэра Windows 10 в командной строке windows с помощью следующей команды: netsh advfirewall отключил состояние allprofiles. Это не сработало

  2. В windows брандмауэр Я добавил внутреннее правило и исходящее правило, которое позволяет любому приложению в моей ОС получать доступ к службе, работающей на порту 65432

  3. Я изменил свою версию python с 3.8.2 на 3.7.7, потому что раньше я мог отлично запустить этот код и использовал версию python 3.7

  4. Я пробовал несколько разных методов установки переменной HOST, включая «localhost», «127.0.0.1», socket.gethost () и socket.gethostbyname («localhost»)

Я могу подключиться к серверу с помощью приложения Windows te lnet, но это все. Честно говоря, я исчерпал возможные решения, которые я могу найти в Интернете, и я знаю, что этот вопрос часто возникал на этом веб-сайте, но я честно пробовал каждое решение, которое я видел до сих пор, включая три часа поиска.

Спасибо за любую помощь, которую вы можете оказать, ребята.

1 Ответ

0 голосов
/ 19 июня 2020

Поскольку код ранее работал на машине, похоже, это не проблема кода. Также код работал нормально на моей машине. Я предлагаю вам еще раз выполнить следующие шаги:

Решение 1:
1. отредактируйте адрес сервера как 127.0.0.1 или частный IP-адрес хоста в обоих кодах, чтобы быть уверенным, что нет несоответствие.
2. Сначала запустите серверную программу и убедитесь, что она не завершилась.
3. Запустите клиентское приложение и проверьте, не вызвала ли серверная программа какие-либо ошибки или исключения.

Решение 2 : Измените номер порта и следуйте решению 1.

Решение 3. Выключите брандмауэр windows в пользовательском интерфейсе на всякий случай. Выполните шаги решения 1

Решение 4. Измените адрес сервера как host = ''

...