2017-11-13 10 views
0

私はJava RMI配布システムで作業しています。ubuntuをローカルマシン(ubuntu-(master)IP = 192.168.101.131とubuntu-(slave)IP = 92.168)で実行している2つのVMがあります。 101.137)。 bankServer.jarを(Tomcat内の)両方のVMで実行できますか。 ubuntu-(master)データベースは自動的にubuntu-(slave)に複製されます。ここまでは順調ですね。 [OK]を、に結合する場合、ホストが、彼がオンラインであるかどうかを確認し、ために私のローカルマシン上で私のプログラム最初のpingをクライアントを実行している場合、サーバーは今Java RMIで不明なホスト

[email protected]:/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... 

1099デフォルトポートで実行されている(ポルトガル語で)言及しますそのようなレジストリ:

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... 

ここで何が起こっているのでしょうか?どんな助けもありがとうございます。あなたはLocateRegistry.getRegistry()にレジストリ

+0

VMを実行するために何を使用していますか?どのようなネットワーク構成ですか?実行中のVMにtelnetで接続できますか? – Kraylog

+1

'getRegistry()'はURLではなくホスト(名前またはリテラルアドレス)および/またはポートを取ります。エラーはURLをホスト名として扱い、ホスト名ではないためです。あなたはIPv4アドレスを持っているのに明らかにDNS名とデフォルトポート(1099)を持っていないホストを持っているので、ドット付きアドレスを文字列として渡してください。 –

答えて

0

は、ホスト名ではなく、RMIのURLです。 Javadocを参照してください。

0

引数を取得するときにrmi://を削除しようとする必要があり

関連する問題