1

Java 6 を実行している Windows 2003 マシンで過去 6 年間正常に実行されている Java で記述されたレガシー サーバー アプリケーションがあります。
最近、Java の最新バージョンを実行している新しい Windows 2008 マシンにアプリケーションを移行しました。
アプリケーションは正常に動作しているように見えますが、奇妙な問題が 1 つあります。

このコードString remoteip=socket.getInetAddress().getHostAddress()は、リモート クライアントの IP を返すのではなく、サーバー マシンのインターネット IP を返すようです。
これは、過去 6 ~ 7 年間、Linux および Windows 2003 マシンの両方で適切に機能していました。

すべての設定を再確認するために、IIS に小さな PHP Web サイトをセットアップし、REMOTE_ADDr 変数の値を出力しました。クライアントの正しい IP アドレスが出力されました。

Javaアプリを混乱させる可能性のあるものについての手がかりはありますか?

4

1 に答える 1

3

Java doc には次のように書かれています。

 getInetAddress()
 Returns the local address of this server socket.

おそらく以前は、サーバーとクライアントを同じマシンで実行していたでしょう。

より具体的には、おそらくクライアントからの接続を待っている ServerSocket(sSocket) があります。sSocket.getInetAddress() を呼び出すと、サーバーの IP アドレスが取得されます。一方、ServerSocket の役割は、IP アドレスとポートにバインドし、クライアントからの接続を待機することです。このような接続が確立されると、sSocket.accept() メソッドは、サーバーからその特定のクライアント (cSocket) への接続を表す Socket を返します。cSocket.getRemoteAddress() を呼び出すと、クライアントの IP が返されます

于 2012-07-21T12:12:28.307 に答える