私は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()
にレジストリ
VMを実行するために何を使用していますか?どのようなネットワーク構成ですか?実行中のVMにtelnetで接続できますか? – Kraylog
'getRegistry()'はURLではなくホスト(名前またはリテラルアドレス)および/またはポートを取ります。エラーはURLをホスト名として扱い、ホスト名ではないためです。あなたはIPv4アドレスを持っているのに明らかにDNS名とデフォルトポート(1099)を持っていないホストを持っているので、ドット付きアドレスを文字列として渡してください。 –