【发布时间】:2009-10-02 16:15:08
【问题描述】:
我想从我的 java 小程序中确定本地 IP 地址。问题是当同一台机器上有多个 IP 地址时,该机器具有 LAN 和 Internet 连接 (掌上电脑,VMWare ...)。
这是我的测试:
public static void main(String[] args) {
try {
String hostName = InetAddress.getLocalHost().getHostName();
System.out.println("HostName = " + hostName);
System.out.println("HostAddressLocal = " +
InetAddress.getLocalHost().getHostAddress());
InetAddress[] inetAddresses = InetAddress.getAllByName(hostName);
for (InetAddress inetAddress : inetAddresses) {
System.out.println("hostAddress = " + inetAddress.getHostAddress());
}
} catch (Exception e) {
e.printStackTrace();
}
}
结果是:
HostName = xxxx
HostAddressLocal = xx.xx.xx.xx
hostAddress = 10.10.11.51
hostAddress = 192.168.23.1
hostAddress = 192.168.106.1
其中 xx.xx.xx.xx 不是正确的地址。正确的是 10.10.11.51。
编辑回复jarnbjo:
你的水晶球说的是真话。你已经明白我的问题了。客户端可以通过代理连接,所以我不能使用你的第一点。如果我在我的计算机上执行以下代码:
Socket s = new Socket("www.w3c.org", 80);
InetAddress ip = s.getLocalAddress();
System.out.println("Internet IP = " + ip.toString());
s.close();
我有这个结果:
Internet IP = /127.0.0.1
而不是 10.10.11.51
【问题讨论】:
-
你是说小程序吗?有一个主要的并且能够访问本地UP地址?
-
我们也遇到过这个问题。
-
你到底想做什么?为什么需要这些信息?如果用户没有本地地址怎么办?如果用户有很多接口和很多本地地址怎么办?如果用户有 IPv6(每个接口可能有很多地址)怎么办?你的程序有一些设计问题,它不应该依赖这个特性来正常工作。
-
同样的问题,谢谢你的帖子;)
标签: java networking applet