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