为什么未使用ec2公共IP建立连接

时间:2019-02-16 09:02:31

标签: php amazon-web-services amazon-ec2 ip-address serversocket

我们已经构建了一个车辆跟踪系统(VTS)设备。我有一个PHP脚本来侦听客户端连接。

当我们使用EC2实例的私有IP进行连接时,建立了连接,但是当我们尝试将外部IP或公共IP放入php脚本时,则会显示错误。

我该如何解决?

我已经用Amazon EC2启动了Linux虚拟机。然后使用腻子从Windows连接到Linux实例。有一个PHP脚本可以监听传入的连接。当我放置EC2的专用IP时,它将连接,但是当我放置公共IP时,它将引发错误“无法绑定ip [99]”

public function __construct($bind_ip,$port)
{
    set_time_limit(0);
    $this->hooks = array();

    $this->config["ip"] = $bind_ip;
    $this->config["port"] = $port;

    $this->master_socket = socket_create(AF_INET, SOCK_STREAM, 0);
    socket_bind($this->master_socket,$this->config["ip"],$this->config["port"]) or die("Issue Binding");
    socket_getsockname($this->master_socket,$bind_ip,$port);
    socket_listen($this->master_socket);
    SocketServer::debug("Listenting for connections on {$bind_ip}:{$port}");
}

我们想从车辆跟踪设备获取数据。我们可以为该设备设置IP地址并将其放入PHP脚本,但是当我使用公共IP运行它时,它会引发错误“无法绑定ip [99]”

2 个答案:

答案 0 :(得分:0)

请确保正确配置了EC2实例安全组。 使用ip和您在EC2实例中配置的端口尝试telnet。 例如:telnet 192.168.0.10 25,(25是端口号)。

答案 1 :(得分:-1)

VTS系统需要静态IP。您确定要投放的公开内容是静态的吗?在大多数情况下,公共IP都是子网划分的。