私はチャットを開発しています。まず、ソケットとストリームを使用してサーバーとクライアントの間で通信しました。今私はRMIに変換しようとしています。RMIへのアドレスとポートのバインド
ローカルで動作していますが、接続しようとすると接続が拒否されます。それはサーバーのローカルIP(192.168.25.28)を示しています。
私のコードは次のようになります。
public void conectar() throws RemoteException, MalformedURLException, NotBoundException{
// COMUNICADOR SERVIDOR (USADO PELO CLIENTE)
comunicadorServidor = new ComunicadorServidor(id); // cria um novo comunicador
LocateRegistry.createRegistry(8081); // inicia o registro RMI na porta 8081
Naming.rebind("//:8081/ComunicadorServidor", comunicadorServidor); // vincula o objeto comunicador ao endereço RMI
// COMUNICADOR CLIENTE (USADO PELO SERVIDOR)
comunicador = (IComunicadorCliente) Naming.lookup("//" + conexao.getInetAddress().getHostAddress() + ":8082/ComunicadorCliente"); // procura o comunicador no cliente
}
だから私は、サーバーとクライアントの両方でRMIを使用し、もう1つは、サーバに、私は認証のようなメソッドを持っているので、それぞれ別のものに接続して、メッセージ、clienteの用途を送りますクライアントでは、サーバーが使用する更新ユーザーリストと受信メッセージのようなメソッドがあります。
まず、RMIクラス(サーバー側)のインスタンスを作成し、ポート8081でレジストリを作成し、オブジェクトをポート8081に「ComunicadorServidor」という名前でバインドします。
その後、サーバーはクライアントRMIに接続しようとします。
私はリバインドメソッドについて読んでいます。アドレスを指定しないと、ローカルホストアドレスにバインドされます。ローカルマシンにバインドされていても、それはまだ外部で利用できますか?そうでなければ、ソケットと同じ場所にバインドするにはどうすればいいですか?ここではポートを指定するだけで、localhost、local ip、またはexternal ipなどの任意のアドレスで使用できるようになります。
クライアントIPを取得するにはどうすればよいですか(今はソケットから取得しています)、どうすれば正しいIPが得られるのでしょうか?ソケットなしでクライアントのRMIに接続できますか?
クライアント側では、RMIクラスを8082にバインドし、提供されたIPとポートを使用してサーバー側でRMIクラスを検索する点を除いて、同じことが不可欠です。
私はあなたが言ったことについてちょうど読んでいました。それはうまくいくようですが、オブジェクトをサーバーにエクスポートするために、独自のリモートオブジェクトを使用してください。私は明日それを試し、あなたにここで知らせるでしょう。 – Deeh
それは働いて、ありがとう!私はサーバがクライアントから取得すべきクラスからユニキャストの拡張を削除しました。それでexporteObjectメソッドを使うことができました。 – Deeh