2

私は非常にシンプルなチャットクライアントとサーバーで作業しており、サーバー上に次のようなメッセージを表示する必要があります:( "IP:" + ipAddr)
私の問題は、サーバーのipAddrを取得しようとしたときです。

Macのターミナルの「curlifconfig.me」とまったく同じように機能させたい。
コンピューターでifconfig.meをカールすると、次のように返されます。76.xx.xxx.xxx
自分自身を保護するために非表示になっているパーツ。


これを返すにはプログラムが必要です。
現在このコードで:

        try {

    InetAddress thisIp = InetAddress.getLocalHost();

    System.err.println("IP: "+ thisIp.getHostAddress());

    }
    catch(Exception e) {

    System.err.println("Error!");

    }

}

127.0.0.1、ローカルホストIPアドレスを返します。誰かがこれを行うためのプログラムを理解するのを手伝ってくれますか?

ありがとう!

4

1 に答える 1

2

ifconfig.meはWebサイトであるため、カールすると、IPアドレスとして表示される内容を示す外部Webサイトが表示されます。この情報は、JVM(または実際にはコンピューター)内では利用できません。パブリックIPアドレスを確認するには、ネットワークの外部からIPアドレスを要求する必要があります。

これで、JavaでWebサイトのコンテンツを取得する場合は、次のように実行できます。

この(更新された)例は、cURLがifconfig.meサイトに送信するものを正確にシミュレートするため、期待される応答が得られることに注意してください。cURLのようなユーザーエージェントを送信しない場合、ifconfig.meはWebブラウザに送信する完全なHTMLドキュメントを送信するだけです。

public static void main( String[] args ) throws IllegalStateException, IOException
{
    HttpClient client = new DefaultHttpClient();
    HttpGet request = new HttpGet("http://ifconfig.me/");
    request.setHeader("User-Agent","curl/7.16.3 (i686-pc-cygwin) libcurl/7.16.3 OpenSSL/0.9.8h zlib/1.2.3 libssh2/0.15-CVS");
    HttpResponse response = client.execute(request);

    // Get the response
    String addr = IOUtils.toString(new InputStreamReader(response.getEntity().getContent()));
    System.out.println(addr);
}

現在、このコードはApache Commons IOのHttpComponentsIOUtils.toString()を使用しています。これらのプロジェクトは、チャットクライアントとサーバーをさらにシンプルにするのに役立ちます。

于 2012-08-28T02:27:32.087 に答える