Назад | Перейти на главную страницу

Сокет Python не может подключиться к Windows Server

Я использую библиотеку сокетов в Python и хочу подключить клиент (мой компьютер) к серверу (экземпляр AWS EC2 Windows). Но клиент всегда дает ошибку: - «TimeoutError: [WinError 10060] соединение не удалось из-за того, что подключенный хост не ответил»

Решения, которые я уже реализовал: -

  1. Отредактируйте группу безопасности, чтобы включить необходимые входящие порты.
  2. Выделить статический IP-адрес для инстанса EC2
  3. Перезагрузите EC2
  4. Включить входящий порт от брандмауэра Windows внутри экземпляра EC2

Когда я перехожу в диспетчер задач >> производительность >> Resourece Monitor, я вижу, что порт открыт: -

Адрес PID изображения Отправка (Б / сек) Прием (Б / сек) Всего (Б / сек)

pythonw.exe 1456 EC2AMAZ-XXXXXX 627 647 1274

Изображение PID Локальный адрес Локальный порт Удаленный адрес Удаленный порт Потеря пакетов (%) Задержка (мс)

pythonw.exe 1456 Петля IPv4 50770 Петля IPv4 50769 0 0

Изображение PID Адрес Порт Протокол Состояние межсетевого экрана

pythonw.exe 1456 Петля IPv4 3469 TCP Разрешено, не ограничено

Но я все еще не могу проверить связь с EC2 на требуемом порту (telnet PUBLIC_IP PORT). Следовательно, клиент не может подключиться через сокет.


server.py

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
port = 3469

s.bind(('localhost', port))
print ('Socket binded to port 3469')

s.listen(1)
print ('socket is listening')





while True:

    try:

        print('waiting for connection')
        connection, client_address = s.accept()
        print ('Got connection from ', client_address)

        data = connection.recv(16)
        print('received {!r}'.format(data))

        connection.close(); s.close();break;

    except KeyboardInterrupt:
        connection.close(); s.close();break;

Client.py

import socket 


s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)


port = 3469


s.connect(('EC2-PUBLIC-IP-ADDRESS-OF-EC2-HERE', port))

z = 'Hello World'


s.sendall(z.encode())

s.close()

Этот код отлично работает, когда и сервер, и клиент находятся на localhost.

Не могу понять, чего не хватает. Пожалуйста помоги.

Спасибо и привет

s.bind (('локальный хост', порт))

Вы, кажется, только слушаете localhost который является адресом обратной связи и недоступен в общедоступном Интернете.