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

时间:2018-09-23 17:11:02

标签: 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.connect("AWS Public IP", 5000);

但是为什么呢?如我所知,绑定到0.0.0.0应该将套接字绑定到所有可用IP,并且我的AWS控制台中有一条规则允许所有连接到端口5000

1 个答案:

答案 0 :(得分:1)

如果您试图绑定EC2公用IP,则不能,因为公用IP没有分配给您的网络接口。您将绑定私有IP地址。 EC2实例对“逻辑上”分配给它的公共IP地址一无所知。

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

但是,更好的选择是绑定bind(),因为这意味着绑定到所有网络接口。