web-dev-qa-db-ja.com

java rmi -Djava.rmi.server.hostname = localhostは、0.0.0.0でリッスンしているソケットを開きます

-Djava.rmi.server.hostname = localhostオプションを使用してrmiをlocalhostでのみリッスンさせますが、netstatはソケットがリッスンしていることを示します0.0.0.0

奇妙なことに、RMIRenewCleanスレッドはローカルホストを使用していることを示しています。例えば。 RMI RenewClean- [localhost:59357]

-Djava.rmi.server.hostname = localhostを設定した場合、127.0.0.1でのみリッスンする必要があると想定しました。

Java.rmi.server.hostnameが制御するものを誤解していますか?

8
Neil Wightman

-Djava.rmi.server.hostname = localhostを設定した場合、127.0.0.1でのみリッスンする必要があると想定しました。

番号。

Java.rmi.server.hostnameが制御するものを誤解していますか?

はい。 Java.rmi.server.hostnameは、リモートオブジェクトがリッスンするIPアドレスとは何の関係もありません。それはRMIServerSocketFactory.によって決定されます

別の回答(後で削除)で私の本からの誤った引用を修正するには:

Java.rmi.server.hostname:ホスト名文字列;デフォルト値は、「ドット付きクワッド」形式のローカルホストのIPアドレスです...これは、リモートオブジェクトがエクスポートされるときにこのJVMによって作成されるリモートスタブに埋め込まれます。これは、マルチホームホストによってエクスポートされたRMIサーバーの実効IPアドレスを制御するために使用できます。このプロパティは、JVMの存続期間中に1回だけ読み取られます。[1]

さらに拡張するために、NATデバイスの背後にあるホストによってエクスポートされたRMIサーバーの有効なIPアドレス(クライアントから見た場合)を制御するためにも使用できます。必ずしも何もありません。ローカルホストとの関係、たとえばNATの状況で、ホストホスト、ドット付きクワッドIPv4アドレス、またはIPv6アドレスのいずれかです。

[1] Pitt&McNiff、Java.rmi、The Remote Method Invocation Guide、 Addison Wesley 2001、p.258。

18
user207421