public static String[] getAllLocalIP() {
String[] localServers = null;
try {
InetAddress addr = InetAddress.getLocalHost();
String hostName = addr.getHostName().toString();
// 获取本机ip
InetAddress[] ipsAddr = InetAddress.getAllByName(hostName);
localServers = new String[ipsAddr.length];
for (int i = 0; i < ipsAddr.length; i++) {
if (ipsAddr[i] != null) {
localServers[i] = ipsAddr[i].getHostAddress().toString();
}
}
} catch (Exception e) {
}
return localServers;
}
这种方法在Windows下是没问题的,但是在Linux下运行的时候很有可能会是127.0.0.1,修改host虽然可以解决,但并不是个明智之举。下面这种方法在Windows和Linux下都可以获得正确的IP:
/**
* 取得本机IP(可能有多个网卡,Linux和Windows都适用)
*
* @return List
*/
public static List getAllLocalIP() {
List localServers = new ArrayList ();
try {
Enumeration netInterfaces = NetworkInterface
.getNetworkInterfaces();
InetAddress ip = null;
while (netInterfaces.hasMoreElements()) {
NetworkInterface ni = netInterfaces.nextElement();
Enumeration address = ni.getInetAddresses();
while (address.hasMoreElements()) {
ip = address.nextElement();
if (!ip.isLoopbackAddress()
&& ip
.getHostAddress()
.matches(
"((2[0-4]//d|25[0-5]|[01]?//d//d?)//.){3}(2[0-4]//d|25[0-5]|[01]?//d//d?)")) {
// System.out.println("非回环ip: " +
// ip.getHostAddress());
localServers.add(ip.getHostAddress());
}
}
}
} catch (SocketException e) {
e.printStackTrace();
}
return localServers;
}