如何在JAVA中获取IP地址,就像以下链接中所示
如何在JAVA中获取IP地址,就像以下链接中所示
可能是重复问题:
\n如何在Java中获取用户的IP地址
\n如何使用URL字符串获取IP地址?(Java)
\n链接为:\"http://automation.whatismyip.com/n09230945.asp\"
\n上述链接返回外部IP。
\n我尝试编写自己的代码以获取我的IP,类似于上面的链接。
\n我的代码是:
String my_own_ip = InetAddress.getLocalHost().getHostAddress();
\n那么如何获取这个IP呢?
\n在这段代码中返回的是我的内部IP。
\n我在局域网连接中,我的局域网IP是192.168.0.109,而外部IP是27.54.180.156。
\n我想要的是27.54.180.156
\n提前感谢!
问题的出现原因是用户希望在Java中获取IP地址,类似于给出的链接中的示例代码。然而,给出的示例代码是在JSP页面中使用的,而用户没有提到他们正在使用JSP或任何其他类型的Web编程。此外,示例代码中使用的脚本片段被认为是不推荐使用的。
解决方法是使用Java代码来获取IP地址,而不是在JSP页面中使用脚本片段。下面是一种解决方法:
import java.net.InetAddress; public class GetIPAddress { public static void main(String[] args) { try { InetAddress myIPAddress = InetAddress.getLocalHost(); System.out.println("My IP Address: " + myIPAddress.getHostAddress()); } catch (Exception e) { e.printStackTrace(); } } }
使用上述代码,可以在Java中获取IP地址。该代码将打印出计算机的IP地址。
问题出现的原因是假设计算机可以访问外部IP地址,但实际上不能。只有路由器和外部连接才能访问IP地址。
解决方法是使用类似于http://icanhazip.com或http://checkip.dyndns.org的网站(或者您提供的网站http://automation.whatismyip.com/n09230945.asp),并在Java客户端上使用HTTP Get连接到该网站,就像在这个问题或这个问题中所示。一旦收到HTML页面,解析它以找到IP地址。这可以使用正则表达式来完成,因为这些都是非常简单的HTML页面,不需要进行复杂的DOM解析。
找到一个可以无限次调用的免费API的关键是找到一个适合的网站。我上面列出的两个网站据我所知没有任何限制。
问题的原因是使用了错误的方法(getLocalHost())来获取IP地址,解决方法是使用正确的方法(getByName())来获取IP地址。以下是整理成的文章:
在Java中如何获取IP地址,就像下面的链接所示?
在Java中,如果你想获取一个网站的IP地址,你不能简单地使用getLocalHost()方法。这个方法将返回你的本地主机的IP地址,而不是你想要的网站的IP地址。
正确的方法是使用getByName()方法。这个方法接受一个字符串参数,该参数是你想要获取IP地址的网站的URL。然后,它将返回一个InetAddress对象,你可以使用它来获取所需的IP地址。
下面是一个示例代码:
InetAddress addy = InetAddress.getByName("www.stackoverflow.com"); System.out.println(addy.getHostAddress());
请注意,你需要省略URL中的协议(例如,http://)和路径。如果你包含了协议或路径,getByName()方法将抛出异常。
下面是一些错误的示例代码和它们的修复版本:
// 错误的示例代码 InetAddress addy = InetAddress.getByName("http://www.stackoverflow.com"); // 抛出异常 System.out.println(addy.getHostAddress()); // 修复后的示例代码 InetAddress addy = InetAddress.getByName("www.stackoverflow.com"); System.out.println(addy.getHostAddress()); // 错误的示例代码 InetAddress addy = InetAddress.getByName("www.stackoverflow.com/questions"); // 抛出异常 System.out.println(addy.getHostAddress()); // 修复后的示例代码 InetAddress addy = InetAddress.getByName("www.stackoverflow.com"); System.out.println(addy.getHostAddress());
通过使用正确的方法,你将能够获取到你想要的网站的IP地址。