我正在尝试使用python测试笔记本电脑和Google计算引擎实例之间的简单客户端服务器设置。该设置在两台笔记本电脑之间正常工作。但是,当我在VM实例中运行服务器程序时,在调用bind命令后出现以下错误:“ socket.error:[Errno 99]无法分配请求的地址”
我试图绑定到外部IP地址,以便可以从外部设备接收数据。
这是代码段
import socket
s = socket.socket()
port = 12345
s.bind(('xxx.xxx.xxx.xxx',port))
任何人都可以告诉我为什么我无法绑定到外部IP地址。我试图在Google的文档中以及通过在线搜索找到答案,但无济于事。我对此并不陌生,甚至都不知道要发布什么信息来帮助进行故障排除。预先感谢。
答案 0 :(得分:0)
Google Cloud的网络在internal and external IP addresses之间有所区别。特别是,GCE VM实际上将没有与外部可见IP地址的接口-云基础架构将在实例外部处理转换。
您需要绑定到实例的内部IP地址,并且GCP的网络基础架构会为您处理路由,前提是您的VPC firewall configuration允许这种路由。
注意:按照规定,您当前的防火墙配置没有允许12345端口进入的规则,您需要添加并确保它applies to this particular instance(通过应用于实例或通过将规则应用于网络中所有目标的目标标记
您还可以考虑使用0.0.0.0(或INADDR_ANY
),它在python中只是the empty string。因此,这也应该对您有用(再次,假设防火墙配置正确):
import socket
s = socket.socket()
port = 12345
s.bind(('',port))