2016-05-11 28 views
0

ネットワークカードがネットワークAに接続されているときにRMIサーバを起動しています。クライアントが正常に動作し、 "Hello World"が表示されます。ネットワークBへのネットワーク接続を変更したら(RMIサーバーを再起動せずに)、私はもうサーバーに接続できません。 サーバとクライアントは常に同じホスト上で実行されるため、localhostアドレスを使用するだけで十分です。RMIサーバが間違ったIPアドレスを使用しています

サーバー:

public class HelloImpl extends UnicastRemoteObject implements Hello { 

    public HelloImpl() throws RemoteException { 
    } 

    public String sayHello() { 
     return "Hello world!"; 
    } 

    public static void main(String args[]) throws RemoteException { 
     Registry registry = LocateRegistry.createRegistry(3128); 
     registry.rebind("HelloServer", new HelloImpl()); 
    } 
} 

クライアント:

public class HelloClient { 

    public static void main(String arg[]) throws Exception{ 
     Registry registry=LocateRegistry.getRegistry("localhost", 3128);; 
     Hello result = (Hello) registry.lookup("HelloServer"); 
     System.out.println(result.sayHello()); 
    } 

} 

例外がある:ネットワークA.ありレジストリに接続された状態で割り当てられていた私のIPアドレスを参照し

HelloClient exception: Connection refused to host: 192.168.169.136; nested exception is: 
    java.net.ConnectException: Connection timed out: connect 

ルックアップが期待通りに機能する場合、result.sayHello()への呼び出しだけが上記の例外で失敗します。

RMIに、(レジストリだけでなく)すべてのものに対してlocalhostを使用するように指示するにはどうすればよいですか?

+0

ローカルホストと同じである172.0.0.1で試してください。しかし、マシンはローカルホストを他のものにマップしている可能性があります。エラーメッセージに基づいて、ネットワークを切り替えると、IPアドレスが変更されています。 Javaがローカルホストの代わりにネットワークIPアドレスを使用しているかのように見える –

答えて

2

レジストリを含むリモートオブジェクトをエクスポートする前に、システムプロパティjava.rmi,server.hostnameをサーバーJVMで127.0.0.1に設定します。

+0

これはIPv6だけがアクティブなホストでも機能しますか? – gorootde

+0

スタブのIPアドレスをデフォルトから変更する必要があるすべてのホストで動作します。 – EJP

関連する問題