2017-09-19 16 views
1

私は別のネットワーク上でホストされているサーバーからリモートオブジェクトを取得しようとしています。私は同じマシンと同じネットワーク上に接続することができますが、別のネットワークから取得しようとすると次のようになります。インターネット経由のJava RMI接続

接続がホストから192.168.1.131;ネストされた例外:java.net.ConnectException:接続タイムアウト:接続

間違ったネットワークで検索機能が検索されているようです。 System.setPropertyを使用しようとしましたが、動作しません。ここでは、コード:

サーバー

public class Main { 

    public static void main(String[] args) { 
     try{ 
      System.out.println("Init server...\n"); 
      TestInterface test = new TestImplement(); 


      System.setProperty("java.rmi.server.hostname", "95.247.x.x"); 
      System.out.println("Reg RMI...\n"); 
      Registry rmiRegistry = LocateRegistry.createRegistry(5555); 
      rmiRegistry.rebind("Test" , test); 
      System.out.println("Reg completed!\n"); 
      }catch(Exception e){ 
       e.printStackTrace(); 
      } 
     } 

} 

クライアント

... 
registryRMI = LocateRegistry.getRegistry("95.247.x.x",5555); 
TestInterface testClient = (TestInterface)registryRMI.lookup("Test"); 
... 

は私もクライアントjarにjava.rmi.server.hostnameを設定する必要がありますか?

+1

5555ポートでtelnetできるかどうか確認してください。 – mkalsi

+0

同様に、クライアントが '192.168.1.131'に接続しようとしているのはなぜでしょうか。レジストリがそのアドレスにインスタンスをバインドしているかもしれません...あまりにもurestartしましたか? – gusto2

+0

@ gusto2 'Registryはインスタンスをそのアドレスにバインドします'は全く意味がありません。 *アプリケーション*は、*レジストリ*を介して*名前*を*インスタンス*にバインドします。 'Registry.bind()'操作にはアドレスの概念はありません。 – EJP

答えて

0
TestInterface test = new TestImplement(); 
System.setProperty("java.rmi.server.hostname", "95.247.x.x"); 

あなたが任意のリモートオブジェクトをエクスポート前java.rmi.server.hostnameを設定する必要があります。後でやるのは遅すぎる。

System.setProperty("java.rmi.server.hostname", "95.247.x.x"); 
TestInterface test = new TestImplement(); 
+0

さて、クライアントは適切なIPを取得しますが、接続はまだタイムアウトしています。 "ホストへの接続が拒否されました:95.247.x.x;ネストされた例外:java.net.ConnectException:接続がタイムアウトしました:接続" ルータでポート転送を行ったので、外部ポートを内部ポートに正しくマップします。まだこのエラーが発生しています。 – TheEnigmist

+0

いいえ、* new *エラーが発生しました。それについて「まだ」というものはありません。問題は、ポート転送を正しく行っていないか、またはファイアウォールの背後にある95.247.x.xやその他のネットワーク接続の問題です。 – EJP

+0

クライアント上でサーバー 'java.rmi.server.hostname" blablabla "'を設定した場合、ファイアウォールではないので、 'java.net.UnknownHostException:blablabla'を取得するので、クライアントはレジストリを取得できます。その後、接続がタイムアウトするまで進行できません。 – TheEnigmist

関連する問題