java求本机IP

用java求本机的IP地址, 用

InetAddress myIP=InetAddress.getLocalHost();

这个来求,虽然简单,但是没有考虑虚拟机,无线网卡的情况,下面的这个函数,就考虑了这些情况,给出了最可能的IP地址。

/*

* 功能:求本机IP地址,排除wifi,蓝牙等
*/
public InetAddress getLocalHostLANAddress() throws Exception {
   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();
       return jdkSuppliedAddress;
   } catch (Exception e) {
       e.printStackTrace();
   }
   return null;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

庭博

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值