Amazon web services std@socket_bind尝试在AWS上绑定套接字时出现异常

Amazon web services std@socket_bind尝试在AWS上绑定套接字时出现异常,amazon-web-services,exception,amazon-ec2,websocket,Amazon Web Services,Exception,Amazon Ec2,Websocket,我试图在Amazon Web Services上启动一个简单的套接字服务器,但在尝试像这样绑定套接字时收到一条错误消息: var s:Socket = new Socket(); s.bind(new Host("Public AWS image IP here"), 5000); 错误是std@socket_bind例外。我做错了什么?我是误用了IP地址还是需要打开5000端口?我完全是个初学者 UPD:我已将IP地址更改为0.0.0.0,服务器已成功启动,但客户端仍无法连接到服务器: s.

我试图在Amazon Web Services上启动一个简单的套接字服务器,但在尝试像这样绑定套接字时收到一条错误消息:

var s:Socket = new Socket();
s.bind(new Host("Public AWS image IP here"), 5000);
错误是std@socket_bind例外。我做错了什么?我是误用了IP地址还是需要打开5000端口?我完全是个初学者

UPD:我已将IP地址更改为0.0.0.0,服务器已成功启动,但客户端仍无法连接到服务器:

s.connect("AWS Public IP", 5000);

但是为什么呢?正如我所理解的,绑定到0.0.0.0应该将套接字绑定到所有可用的IP,并且我的AWS控制台中有一条规则允许所有到端口5000的连接。如果您试图绑定EC2公共IP,您不能,因为公共IP没有分配到您的网络接口。您将绑定私有IP地址。EC2实例对“逻辑”分配给它的公共IP地址一无所知

AWS互联网网关(IGW)是一种特殊类型的1对1 NAT网关,用于公共到私有地址映射。这意味着公共IP地址分配给网关的公共端,而不是EC2实例。您的EC2实例接收一个私有IP地址,这是您可以在
bind()
调用中使用的地址


然而,更好的选择是绑定
0.0.0.0
,因为这意味着绑定到所有网络接口。

这解释了很多,但我仍然无法理解为什么在系统中将套接字绑定到0.0.0.0时无法访问publicIP:5000。请尝试连接到localhost:5000。如果您可以连接,那么您就可以使用防火墙、安全组或NACL阻止访问。从Linux(我假设是EC2Linux)尝试
netstat--listen
。确保此端口处于
LISTEN
状态。