在做一些跟网络相关的需求时,很多时候需要获取到相关网络类型的IP地址,如下图:
这个时候用什么方法来获取这个IP地址呢?楼主在之前的开发中,找到了以下方法,代码如下,仅供参考:
/**
* Get Ip address 自动获取IP地址
*
* @throws SocketException
*/
public static String getIpAddress(String ipType) throws SocketException {
String hostIp = null;
try {
Enumeration nis = NetworkInterface.getNetworkInterfaces();
InetAddress ia = null;
while (nis.hasMoreElements()) {
NetworkInterface ni = (NetworkInterface) nis.nextElement();
if (ni.getName().equals(ipType)) {
Enumeration<InetAddress> ias = ni.getInetAddresses();
while (ias.hasMoreElements()) {
ia = ias.nextElement();
if (ia instanceof Inet6Address) {
continue;// skip ipv6
}
String ip = ia.getHostAddress();
// 过滤掉127段的ip地址
if (!"127.0.0.1".equals(ip)) {
hostIp = ia.getHostAddress();
break;
}
}
}
}
} catch (SocketException e) {
e.printStackTrace();
}
Log.d("vivi", "get the IpAddress--> " + hostIp + "");
return hostIp;
}
其中的ipType就是需要获取的网络ip地址类型,我们可以传入eth1,eth0,wlan0,等,为了正确获取到ip地址,我们需要过滤掉ipv6的地址和127.0.0.1。
感谢阅读,有什么不对的地方还请大家指正。