2

我正在开发一个非常简单的聊天客户端和服务器,我需要在服务器上显示这样的消息:(“IP:”+ ipAddr)
我的问题是在尝试获取服务器的 ipAddr 时。

我希望它的工作方式与 Mac 终端中的“curl ifconfig.me”完全一样。
如果我在我的计算机上执行 curl 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,即 localhost IP 地址。谁能帮我找出一个程序来做到这一点?

谢谢!

4

1 回答 1

2

ifconfig.me 是一个网站,所以当你 curl 它时,你会得到一个外部网站,告诉你它所看到的 IP 地址。此信息在 JVM(或真正的计算机)内部不可用,您需要从网络外部的某个地方请求您的 ipaddress 以查看您的公共 ip 地址。

现在,如果你想用 Java 获取网站的内容,你可以这样做:

请注意,这个(更新的)示例将准确模拟 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 回答