RMI Java | IP绑定问题和安全管理器问题

时间:2018-10-21 13:53:43

标签: java rmi rcp

问题1 已解决!

我对以下问题感到困惑,我正在为我的学校做一个有关Java中RMI的项目,并且在RMIRegistery中放置了一个对象

public static void bindObjectToRMIRegistry(Object obj,String name) throws AccessException, RemoteException {
    System.out.println("<< IN ServerHelper.bindObjectToRMIRegistry() >>");
    if(getRMIRegistru() != null) {
        System.out.println("Binding to registry: "+getRMIRegistru().toString());
        getRMIRegistru().rebind(name, (Remote) obj);
    }else {
        System.out.println("No registry to bind");
    }
}

在日志中,我收到以下消息:

  

绑定到注册表:RegistryImpl_Stub [UnicastRef [liveRef:   [端点: 192.168.56.1:9005 ,objID:[0:0:0,0]]]]

     

该端口是9005的好端口,但是IP并不是很好的端口,我没有   ideea他从哪里获得此IP。我还尝试为rmi设置主机   到我的本地主机 192.168.1.2 ,但它一直使用此地址    192.168.56.1:9005

配置中是否缺少某些内容?

问题2

Registry registery = LocateRegistry.getRegistry("192.168.1.2",9005);
IHello hi = (IHello) registery.lookup("HI");

我得到: RemoteException错误:错误解组返回;嵌套的异常是:     java.lang.ClassNotFoundException:Interfaces.IHello(无安全管理器:禁用RMI类加载器)

1 个答案:

答案 0 :(得分:1)

您最有可能拥有多个网络接口,例如LAN,WLAN,用于处理VM的虚拟机等。您可以通过运行ipconfig(Windows)或ifconfig(Linux)进行检查。

在绑定RMI时指定正确的IP。如果您有多个,Java将无法猜测您想要哪个:

Naming.rebind("//192.168.1.2/rmi", new RMI());