无法使用 python 通过 tcp 连接到我的 google 云 VM 实例

Can't connect to my google cloud VM instance through tcp using python

情况

我在python写了一个简单的程序。这是一个简单的套接字聊天程序。在我的程序中,客户端只是连接到一个地址(ip,端口)并发送一条消息,而此时服务器已准备好并接收消息并打印它。我可以保证程序是正确的,因为我在我的电脑上试过了。

我在Google Cloud Platform 上有一个VM 实例,我可以通过ssh 操作它,这是google cloud 提供的一种简单方法。我可以确保服务器正常工作。

问题

我在我的 google 云服务器上启动了一个简单的 tcp 服务器,python 程序。然后我在我的电脑上启动我的客户端程序。但是我得到这个错误:

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

或相当于中文:

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

如何解决这个问题并连接到我的 google 云服务器?

我想可能是防火墙拒绝了我电脑的连接,但不知道如何解决。

此错误表示您的程序未在 0.0.0.0 端口 XYZ 上侦听。

检查您的程序是否正在侦听 localhost。如果它更改为 0.0.0.0 这意味着所有可用的网络。 localhost 表示不监听任何网络接口,只接受来自计算机内部的连接。

然后仔细检查端口号。

看看你有没有在听运行这个命令(Linux):netstat -at

查找与您的端口 XYZ.

对应的线路

当您启动您的程序时,请确保它在创建侦听器时没有出错。如果您尝试使用低于 1024 的端口号,则需要以 root 权限启动该程序。

TCP 连接被拒绝,因为 GCP 防火墙确实阻止了它。因此,您必须创建一条防火墙规则,为 Ingress 连接打开 TCP 端口。

通过导航至 GCP Console 的 VPC 网络部分中的 Firewall rules,您可以创建防火墙规则或更新现有规则。

一种方法是tag你的GCE实例,在创建防火墙规则时,将目标设置为这个标签,至于'Source filters',你的机器的IP尝试从 0.0.0.0/0 建立连接,或者只是允许所有 IP 连接到 0.0.0.0/0 作为源。记得指定需要开启的TCP端口