Не удается подключиться к моему экземпляру виртуальной машины Google через TCP, используя Python - PullRequest
0 голосов
/ 24 ноября 2018

Ситуация

Я написал простую программу на python.Это простая программа для общения в сокетах.В моей программе клиент просто подключается к адресу (ip, port) и отправляет сообщение, тогда как в это время сервер готов, получает сообщение и печатает его.Я могу убедиться, что программа верна, поскольку я попробовал на своем компьютере.

У меня есть экземпляр виртуальной машины на Google Cloud Platform, которым я могу управлять через ssh, простой способ, предоставляемый облаком Google.Я могу убедиться, что сервер работает.

Проблема

Я запускаю простой tcp сервер, программу python на моем облачном сервере Google.Затем я запускаю клиентскую программу на моем компьютере.Но я получаю эту ошибку:

ConnectionRefusedError: [WinError 10061] Невозможно установить соединение, поскольку целевая машина активно отклонила его

или эквивалентно на китайском языке:

ConnectionRefusedError: [WinError 10061] 由于 目标 计算机 积极 拒绝 , 无法 连接。

Как решить эту проблему и подключиться к облачному серверу Google?

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

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

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

Переходя к Правила брандмауэра в разделе сети VPC Консоли GCP, вы можете создавать правила брандмауэра или обновлять существующие.

Один из подходов - пометьте свой экземпляр GCE, и при создании правила брандмауэра установите целевой объект в качестве этого тега, а в качестве «исходных фильтров» - IP-адрес компьютера, с которого вы пытаетесь установить соединение, или просто разрешите всеIP-адреса для подключения с 0.0.0.0/0 в качестве источника.Не забудьте указать порт TCP, который необходимо открыть.

0 голосов
/ 24 ноября 2018

Эта ошибка означает, что ваша программа не прослушивает 0.0.0.0 порт XYZ.

Проверьте, прослушивает ли ваша программа вместо localhost.Если это изменить на 0.0.0.0, что означает все доступные сети.localhost означает, что не прослушивает никаких сетевых интерфейсов и принимает соединения только изнутри компьютера.

Затем дважды проверьте номер порта.

Чтобы проверить, прослушиваете ли вы что-нибудь, выполните эту команду (Linux): netstat -at

Найдите строку с вашим портом XYZ.

При запуске вашей программы убедитесь, что она не выдает ошибку при создании прослушивателя.Если вы пытаетесь использовать номер порта ниже 1024, вам нужно будет запустить программу с привилегиями root.

...