java - 如何使用Java RMI连接EC2实例?

标签 java amazon-web-services jar amazon-ec2 rmi

我有一个在 Amazon 中运行的 EC2 实例。其公共(public) IP 为 54.72.14.247,目前对所有流量开放。

此实例托管一个斐波那契服务器,该服务器根据请求计算斐波那契序列的数字。

服务器的代码很简单(不到30行),可以在下面的链接中看到:

在我的本地计算机中,我有一个尝试访问该服务器的 Java 客户端:

package fiboclient;

import fiboserver.IFibonacci;
import java.math.BigInteger;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;

public class FibonacciClient {

    public static void main(String[] args) {

        System.setProperty("java.security.policy", "client.policy");
        if(args.length == 0 || !args[0].startsWith("rmi:")){
            System.err.println("Usage: java FibonacciClient rmi://host.domain.port/fibonacci number");
            return;
        }

        try{
            Object o = Naming.lookup(args[0]);
            IFibonacci calculator = (IFibonacci) o;

            for(int i = 1; i < args.length; i++){
                try{
                    BigInteger index = new BigInteger(args[i]);
                    BigInteger f = calculator.getFibonacci(index);

                    System.out.println("The " + args[i] + "th Fibonacci number is " + f);
                }catch(NumberFormatException e){
                    System.err.println(args[i] + " is not an integer.");
                }
            }
        }catch(RemoteException e){
            System.err.println("Remote object threw exception " + e);
        } catch (MalformedURLException e) {
            System.err.println(args[0] + " is not a valid RMI URL");
        } catch (NotBoundException e) {
            System.err.println("Could not find the requested remote object on the server");
        }
    }

}

客户端和服务器都有一个策略文件,分别称为server.policyclient.policy。它们都有以下代码:

grant{
    permission java.security.AllPermission;
};

本地运行: 记住策略文件位于正确的位置,首先启动服务器,然后使用以下参数启动客户端:rmi://localhost:1099/fibonacci 0 1 2 3 4 5 55 155

一切都会顺利。

要求 EC2 实例服务器运行: 首先,我在 Ec2 实例上启动了我的服务器。现在,该服务器正在监听并等待请求。

然后在我的本地计算机中,我使用参数 rmi://54.72.14.247:1099/fibonacci 0 1 2 3 4 5 55 155 运行客户端,然后没有得到任何响应。就像字面意思一样,什么也没发生,我不知道为什么!

我错过了什么吗?我该如何解决这个问题?

JAR 文件:

为了方便起见,也为了让大家能够测试用例,我编译了 JARS。运行 JARS 时,使用 java -jar jarFileName.jar 命令,并确保策略文件与 jar 文件位于同一文件夹中

编辑

安全组截图: enter image description here

最佳答案

您是否打开了入站流量的端口?如果没有请关注these steps 。干杯

亚马逊上有更多直接here.

关于java - 如何使用Java RMI连接EC2实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22948482/

相关文章:

java - 使用 Swing 渲染放置位置

java - 如何在 Java 中查找特定接口(interface)的所有(子)子接口(interface)?

javax.naming.NameNotFoundException :while trying to lookup

jar - Android Gradle构建系统:创建Jar非库

java - 通过 Java 将大文件传输到远程服务器的最可靠方法?

java - 如何使用 Maven 将 jar 部署到 S3?

c# - 如何使用亚马逊网络服务获取 "The Offer Listing"?

amazon-web-services - 没有在领事中启用 ACL

reference - 如何在gradle中导出可执行jar,并且这个jar可以运行,因为它包含引用库

java - Android ProgressDialog 显示何时检索数据