Dart:我应该在使用HttpServer.bind()的aws上使用什么IP地址?

时间:2016-08-09 21:47:20

标签: amazon-web-services amazon-ec2 dart

整个晚上我一直在努力在AWS上部署我的第一个网站,并且在最后一个障碍时失败了。我的服务器端代码启动:

HttpServer server = await HttpServer.bind("51.45.28.101", 4040);

我的客户开始:

 WebSocket websocket = new WebSocket("ws://51.45.28.101:4040/ws");

51.45.28.101是分配给我的AWS服务器的公共IP。我使用的是Linux EC2服务器。我使用以下命令启动服务器:

dart main.dart

这会产生错误:

error on initial connection SocketException: Failed to create server socket (OS Error: Cannot assign requested address, errno = 99), address = 51.45.28.101, port = 4040

我在stackoverflow上读过类似的问题,建议用户将IP设置为0.0.0.0'。当我这样做时,我没有得到这个错误。但是,我无法将我的客户端连接到服务器。请注意我已正确设置安全组并在服务器上安装了apache,并且能够使用提供的IP或DNS地址加载基本HTML文件。我在尝试运行main.dart服务器代码时只遇到问题。

有人可以建议我是否应该将我的服务器绑定到公共IP?

非常感谢

2 个答案:

答案 0 :(得分:3)

您应该使用:

HttpServer server = await HttpServer.bind(InternetAddress.ANY_IP_V4, 4040);

这将绑定到任何IP,因此您不必担心弄清楚每个EC2服务器上的IP地址。

无法绑定到公共IP地址。如果要绑定到特定的IP地址,则必须使用专用IP地址。

答案 1 :(得分:2)

最终让这个工作 - 这实际上非常简单,但对于其他没有经验的人来说,读这篇文章的人也可能会挣扎:

1)正如Mark上面建议的那样,不要试图绑定到公共IP 2)我的最后一个问题是亚马逊中的“安全组” - 对于websockets,它似乎与“自定义tcp规则”一起使用,然后将端口设置为您在代码中绑定的任何端口。

如果您仍然遇到问题,请尝试设置规则以允许“所有流量”检查您的规则设置是否存在问题或其他问题。