• 【转载】获取本机IP地址


    转载自:详谈再论JAVA获取本机IP地址

    // 正确的IP拿法
    System.out.println("get LocalHost LAN Address : " + getLocalHostLANAddress().getHostAddress());
    // 正确的IP拿法,即优先拿site-local地址
        private static InetAddress getLocalHostLANAddress() throws UnknownHostException {
            try {
                InetAddress candidateAddress = null;
                // 遍历所有的网络接口
                for (Enumeration ifaces = NetworkInterface.getNetworkInterfaces(); ifaces.hasMoreElements();) {
                    NetworkInterface iface = (NetworkInterface) ifaces.nextElement();
                    // 在所有的接口下再遍历IP
                    for (Enumeration inetAddrs = iface.getInetAddresses(); inetAddrs.hasMoreElements();) {
                        InetAddress inetAddr = (InetAddress) inetAddrs.nextElement();
                        if (!inetAddr.isLoopbackAddress()) {// 排除loopback类型地址
                            if (inetAddr.isSiteLocalAddress()) {
                                // 如果是site-local地址,就是它了
                                return inetAddr;
                            } else if (candidateAddress == null) {
                                // site-local类型的地址未被发现,先记录候选地址
                                candidateAddress = inetAddr;
                            }
                        }
                    }
                }
                if (candidateAddress != null) {
                    return candidateAddress;
                }
                // 如果没有发现 non-loopback地址.只能用最次选的方案
                InetAddress jdkSuppliedAddress = InetAddress.getLocalHost();
                if (jdkSuppliedAddress == null) {
                    throw new UnknownHostException("The JDK InetAddress.getLocalHost() method unexpectedly returned null.");
                }
                return jdkSuppliedAddress;
            } catch (Exception e) {
                UnknownHostException unknownHostException = new UnknownHostException(
                        "Failed to determine LAN address: " + e);
                unknownHostException.initCause(e);
                throw unknownHostException;
            }
        }
  • 相关阅读:
    linux C(hello world)最大公约数和最小公倍数
    linux C(undefined reference to `sqrt')
    linux C(hello world)程序调试
    linux C(hello world)
    Google Map 符号
    Google Map 学习过程中的代码
    Google Map 形状显示
    创建 StyledMapType 地图样式
    地图类型
    使用Visual Studio code
  • 原文地址:https://www.cnblogs.com/LinQingYang/p/12848977.html
Copyright © 2020-2023  润新知