11

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

奇妙なことは、RMI RenewClean スレッドが localhost を使用していることを示していることです。例: RMI RenewClean-[localhost:59357]

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

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

4

3 に答える 3

21

-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]

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

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

于 2012-04-16T12:31:30.897 に答える