android常用工具类 获取本机ip地址

来源:互联网 发布:淘宝最低价 编辑:程序博客网 时间:2024/06/03 21:32
public interface Enumeration<E>实现 Enumeration 接口的对象,它生成一系列元素,一次生成一个。

连续调用 nextElement 方法将返回一系列的连续元素 NetworkInterface.getNetworkInterfaces()    获取本机ip的一些信息



public class LocalIPResolver {    public static String getLocalIP() {        Enumeration ifaces;        try {            ifaces = NetworkInterface.getNetworkInterfaces();            while (ifaces.hasMoreElements()) {                NetworkInterface iface = (NetworkInterface) ifaces.nextElement();                Enumeration iaddresses = iface.getInetAddresses();                while (iaddresses.hasMoreElements()) {                    InetAddress iaddress = (InetAddress) iaddresses.nextElement();                    if (!iaddress.isLoopbackAddress() && !iaddress.isLinkLocalAddress() && !iaddress.isSiteLocalAddress()) {                        return iaddress.getHostAddress() != null ? iaddress.getHostAddress() : iaddress.getHostName();                    }                }            }            ifaces = NetworkInterface.getNetworkInterfaces();            while (ifaces.hasMoreElements()) {                NetworkInterface iface = (NetworkInterface) ifaces.nextElement();                Enumeration iaddresses = iface.getInetAddresses();                while (iaddresses.hasMoreElements()) {                    InetAddress iaddress = (InetAddress) iaddresses.nextElement();                    if (!iaddress.isLoopbackAddress() && !iaddress.isLinkLocalAddress()) {                        return iaddress.getHostAddress() != null ? iaddress.getHostAddress() : iaddress.getHostName();                    }                }            }            return InetAddress.getLocalHost().getHostAddress() != null ? InetAddress.getLocalHost().getHostAddress() : InetAddress.getLocalHost().getHostName();        }        catch (SocketException e) {            e.printStackTrace();        }        catch (UnknownHostException e) {            e.printStackTrace();        }        return "127.0.0.1";    }            /**  * Obtain a free port we can use.  *  * @return A free port number.  */ public static int getFreePort() { ServerSocket ss; int freePort = 0;  for (int i = 0; i < 10; i++) { freePort = (int) (10000 + Math.round(Math.random() * 10000)); freePort = freePort % 2 == 0 ? freePort : freePort + 1; try { ss = new ServerSocket(freePort); freePort = ss.getLocalPort(); ss.close(); return freePort; } catch (IOException e) { e.printStackTrace(); } } try { ss = new ServerSocket(0); freePort = ss.getLocalPort(); ss.close(); } catch (IOException e) { e.printStackTrace(); } return freePort; }}


0 0