1

簡単に言えば、Windowsを使用して、クライアントとサーバーを別々のマシンでRMIアプリケーションを実行しようとしています。

サーバーの簡略化されたコードは次のとおりです。

System.setProperty("java.rmi.server.hostname", "192.168.x.x");  
Registry reg = LocateRegistry.createRegistry(1099);  
RemoteFoo foo = new RemoteFoo();        
reg.rebind("Foo", foo);  

私が持っているクライアントで:

reg = LocateRegistry.getRegistry("192.168.x.x", 1099);
RemoteFooInterface foo = (RemoteFooInterface) reg.lookup("Foo");

私が取得する例外は、オブジェクトを検索する行の「接続がホストを拒否しました: 192.168.xx; ネストされた例外は接続がタイムアウトしました: 接続」です。

同様の問題を抱えている人々から StackOverflow に関するいくつかの質問を読みました。そのため、クライアントが使用するスタブに正しい IP を埋め込むために System プロパティを変更する行を追加しましたが、それでも機能しません。
他に何を試すことができるかについて誰かが私にいくつかの指針を提供できれば、私は非常に感謝します.

4

1 に答える 1

2

サーバーのファイアウォールがアクセスをブロックしている可能性があります。

ポート (この場合は 1099) に接続できることを確認します。たとえば、クライアント マシンから、コマンド プロンプトcmd.exeを開いて入力しますtelnet 192.168.x.x 1099(これにより、サーバーのポート 1099 に接続されます)。「Connecting To ...」と表示されている場合、そのポートは利用できず、クライアント マシンがサーバーに到達できない可能性が非常に高くなります。ping 192.168.xx を試してください (サーバーのファイアウォールで ICMP が許可されている場合に機能します)。

ポート 1099 経由の接続を許可するようにファイアウォールを修正するか、(一時的に) 無効にしてからもう一度試してください。クリアしたら、RMI クライアントを実行します。

于 2014-12-27T11:43:36.890 に答える