Java RMI 中的未知主机



我正在开发Java RMI分布式系统,我的本地机器上有2个运行ubuntu的虚拟机(ubuntu-(主(IP = 192.168.101.131和ubuntu-(从(IP = 92.168.101.137(。我可以在两个虚拟机上运行我的银行服务器.jar(在 tomcat 内(吗?ubuntu-(主(数据库自动在ubuntu-(从属(上复制。目前为止,一切都好。服务器提及(葡萄牙语(在默认端口 1099 中运行。

Cubuntu@ubuntu:/var/www/html/classes$ java -cp ./code/:jar/serverBanco.jar -
Dja.rmi.server.codebase=file:jar/computeInterfaces.jar -
Djava.rmi.server.hostname=192.168.101.131 -
Djava.security.policy=file:jar/all.policy bank.BankServer
Default RMI Port = 1099
Servidor iniciado...

现在,当我在本地机器上运行客户端时,我的程序首先ping主机以查看他是否在线,如果可以,则像这样绑定注册表:

InetAddress inet = null;
     InetAddress inet2 = null;
     String rmi_adress;
        //ping 
        inet = InetAddress.getByAddress(new byte[] { (byte) 192, (byte) 168, 101, (byte) 137 });
        System.out.println("Enviando Ping Request para host: " + inet);
        System.out.println(inet.isReachable(5000) ? "Resposta: Host online" : "Resposta: Host offline");
        inet2 = InetAddress.getByAddress(new byte[] { (byte) 192, (byte) 168, 101, (byte) 131 });
        System.out.println("Enviando Ping Request para host: " + inet2);
        System.out.println(inet2.isReachable(5000) ? "Resposta: Host online" : "Resposta: Host offline");
        try {
            registry = LocateRegistry.getRegistry("rmi://127.0.0.1/BankServer");
            if (inet.isReachable(5000)) {
                rmi_adress = "rmi://192.168.101.137/BankServer";
                registry = LocateRegistry.getRegistry(rmi_adress);      
                System.out.println("RMI Port set to " + rmi_adress);
                bank = (OperationsInterface) registry.lookup(rmi_adress);
            }else {
                rmi_adress =  "rmi://192.168.101.131/BankServer";
                registry = LocateRegistry.getRegistry(rmi_adress);      
                System.out.println("RMI Port set to " + rmi_adress);
                bank = (OperationsInterface) registry.lookup(rmi_adress);
            }

但是当运行客户端时,它无法识别主机。这是我得到的例外:

Enviando Ping Request para host: /192.168.101.137
Resposta: Host online
Enviando Ping Request para host: /192.168.101.131
Resposta: Host online
RMI Port set to rmi://192.168.101.137/BankServer
Exception in thread "main" java.rmi.UnknownHostException: Unknown host: 
rmi://192.168.101.137/BankServer; nested exception is: 
    Java.net.UnknownHostException: rmi://192.168.101.137/BankServer
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:616)
    at 
sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216)
    at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
    at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:342)
    at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
    at atm.ATM.main(ATM.java:52)
Caused by: java.net.UnknownHostException: rmi://192.168.101.137/BankServer
    at 
java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at java.net.Socket.connect(Socket.java:538)
    at java.net.Socket.<init>(Socket.java:434)
    at java.net.Socket.<init>(Socket.java:211)
    at... 

现在这里会发生什么?任何帮助,不胜感激。

您应该在获取注册表时尝试删除rmi://

LocateRegistry.getRegistry()的参数是主机名,而不是 RMI URL。参见Javadoc。

最新更新