【问题标题】:Java server socket deployment on EC2 instance. Client socket connection timeoutEC2 实例上的 Java 服务器套接字部署。客户端套接字连接超时
【发布时间】:2019-06-16 04:22:33
【问题描述】:

尝试从我的 java websocket 客户端连接到部署在 EC2 实例中的 websocket 服务器时,我遇到了超时。

连接在我的本地机器上运行良好,安全组允许所有 TCP 传入流量。

我的假设是我缺少一个网络步骤。

我在 EC2 上部署服务器套接字的步骤:

  • 启动 EC2 实例 (Amazon Linux)
  • 安装java和maven
  • 执行命令 mvn clean -X 和 mvn install
  • 执行命令java -jar mywebserver.jar

--> 结果:代码在端口xxx运行

服务器套接字创建:

    try {


        s = new ServerSocket(port); //listen on specified port

        Log.add("Port " + port + " address: " + s.getInetAddress() + ": server started");


    } catch (IOException ex) {
        Log.add("Server error " + ex + "(port " + port + ")");
        throw new Exception("Error "+ex);
    }

客户端网络

public Client(String serverIp, int serverPort) throws UnknownHostException, IOException {
    s = new Socket(serverIp, serverPort);
}

非常感谢您的帮助。

菲利克斯

【问题讨论】:

    标签: java sockets amazon-ec2 amazon-linux


    【解决方案1】:

    我建议:

    • 仔细检查防火墙设置
    • 尝试从客户端等 ping/telnet 服务器计算机。
    • 在您的 Socket 中使用 InetAddress 初始化客户端代码,因为您也可以使用它的 isReachable() 方法

    我认为您还缺少服务器端的以下部分:

    Socket socket = s.accept();
    

    请查看一些客户端/服务器套接字示例,例如: https://www.journaldev.com/741/java-socket-programming-server-client

    【讨论】:

    • 感谢您的回答。 * 防火墙应该没问题,因为我可以通过 SSH 连接到我的 EC2 实例。 * 我也尝试使用 InetAddress 创建服务器
    • 在回答s.accept() 时添加了您可能在服务器端丢失的部分
    猜你喜欢
    • 2013-11-30
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    • 2012-07-24
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    • 2021-03-31
    相关资源
    最近更新 更多