RMI を使用するクライアント/サーバー アプリケーションを作成しています。クライアントの接続を受け入れることができる不変のアドレスを取得するために、dyndns を使用します。しかし、次のエラーが表示されるため、サーバーでバインド操作を実行する際に問題があります: 接続が拒否されました: 接続
私はこの方法でバインド操作を行います:
MultiServer multi = new MultiServer(); // creates an instance of the remote object
LocateRegistry.createRegistry(port);
Naming.bind("//my_host_address.dyndns.org:my_port/MultiServer", multi);
何を設定する必要がありますか? 使用するポートを開き、dyndns サービスを正しく構成しました (ソケットで使用するため、確実です)。
編集:
実際、私は自分のサーバーで次のようなことをしています:
//other code
MultiServer multi = new MultiServer();
System.setProperty("java.rmi.server.hostname", "hostname.dyndns.org");
LocateRegistry.createRegistry(2367); // the server will listen on port 2367
Naming.bind("//localhost:2367/MultiServer", multi);
それは十分ですか?または、クライアントに他の情報を指定する必要がありますか? クライアント側では、これを行うだけです:
IRemoteServer remote = (IRemoteServer)Naming.lookup("rmi://hostname.dyndns.org:2367/MultiServer");
この指示の後、私は通常、リモート インターフェイスによって公開されたメソッドを使用します。
しかし、次の手順に従うと、次のエラー メッセージが表示されます。
Connection refused to host: **SERVER_INTERNAL_IP**; nested exception is:
java.net.ConnectException: Connection timed out: connect
クライアントがDNSホストアドレスを解決するときに、サーバーの実際のIPではなく、サーバーの内部IPアドレスを指すようにするにはどうすればよいですか?
EDIT2:クライアントはサーバーを検索できますが、リモートメソッドを呼び出すことができず、クライアントからリモートメソッドを呼び出そうとすると正確に例外が発生することに気付きました。