0

RemoteServer.getClientHost() を使用すると、Red Hat では 127.0.0.1 が取得されますが、Windows ではローカル IP 192.168.1.15 が取得されます。Linux では別の方法が必要ですか? 同じコードで:

  String chost = getClientHost();// 客户端主机
            if (logger.isDebugEnabled()) {
                StringBuffer strb = new StringBuffer();
                strb.append("客户端主机:").append(chost).append(",用户名:").append(username);
                logger.debug(strb.toString());
            }
            boolean login = rmiImpl.serverLogin(chost, username, password);
            System.out.println(chost+"........"+username+"......."+password);
            if (!login) {
                logger.debug("登录失败...");
                throw new LoginException();
            }

コンソールが表示されます:127.0.0.1........TestWebServer.......123456

私の英語はあまり上手ではありません!

4

3 に答える 3

0

同じマシンで両方の OS を実行していると仮定します。

UNIXシステムが最初にループバックインターフェースをリストするため、そのアドレスが返される可能性がありますが、Windowsは最初にイーサネットインターフェースをリストし、イーサネットアドレスを返します。

于 2013-07-12T03:19:14.890 に答える
0

@StephenCの答えを少し拡張するには:

  1. getClientHost()着信ソケットのリモート ソケット アドレスを返します。
  2. その値は、クライアントがサーバーへの接続時に発信ソケットを自動的にバインドする IP アドレスによって異なります。
  3. これは、クライアントからサーバーへの IP ルートに依存します。
  4. それは、クライアントが何に接続しようとしているかによって異なります。
  5. クライアントは、発信 IP アドレスのうち、ターゲットへの経路が最も安いものに自分自身をバインドします。
  6. そしてそれは、クライアントがサーバーのアドレスを 127.0.0.1 として認識したか、外部 IP アドレスとして認識したかによって異なります。
  7. これは、クライアントの DNS または etc/hosts ファイルに依存します。

RMI プロキシの影響は、私から購入した場合や恐ろしい HTTP トンネリング オプションを使用している場合を除き、無視してかまいません ;-)。

于 2013-07-12T05:53:49.900 に答える