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



我正在尝试在亚马逊云科技上启动一个简单的套接字服务器,但在尝试像这样绑定套接字时收到错误消息:

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因为这意味着绑定到所有网络接口。

最新更新