在开发应用时,经常要获取网络的所有网卡的IP地址,这样可以选择绑定哪个网卡。

代码如下:

获取所有有效的网卡:

import java.net.Inet6Address;import java.net.InetAddress;import java.net.NetworkInterface;public static String[] getAllNetInterface() {        ArrayList availableInterface = new ArrayList<>();        String [] interfaces = null;        try {            Enumeration nis = NetworkInterface.getNetworkInterfaces();            InetAddress ia = null;            while (nis.hasMoreElements()) {                NetworkInterface ni = (NetworkInterface) nis.nextElement();                Enumeration ias = ni.getInetAddresses();                while (ias.hasMoreElements()) {                    ia = ias.nextElement();                  if (ia instanceof Inet6Address) {                      continue;// skip ipv6                  }                    String ip = ia.getHostAddress();                    Log.d(TAG,"getAllNetInterface,available interface:"+ni.getName()+",address:"+ip);                    // 过滤掉127段的ip地址                    if (!"127.0.0.1".equals(ip)) {                        availableInterface.add(ni.getName());                    }                }            }        } catch (SocketException e) {            e.printStackTrace();        }        Log.d(TAG,"all interface:"+availableInterface.toString());        int size = availableInterface.size();        if (size > 0) {            interfaces = new String[size];            for(int i = 0; i < size; i++) {                interfaces[i] = availableInterface.get(i);            }        }        return interfaces;    }

获取指定网卡的IP地址:

/**     * Get Ip address 自动获取IP地址     *     * @throws SocketException     */    public static String getIpAddress(String netInterface) throws SocketException {        String hostIp = null;        try {            Enumeration nis = NetworkInterface.getNetworkInterfaces();            InetAddress ia = null;            while (nis.hasMoreElements()) {                NetworkInterface ni = (NetworkInterface) nis.nextElement();                //Log.d(TAG,"getIpAddress,interface:"+ni.getName());                if (ni.getName().equals(netInterface)) {                    Enumeration 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(TAG,"getIpAddress,interface:"+netInterface+",ip:"+hostIp);        return hostIp;    }

 

更多相关文章

  1. Android(安卓)ListView长按弹出对话框
  2. 2017 Android(安卓)github上优秀开源项目分类汇总
  3. Sina微博的开发心得-1 logo界面
  4. Android开源项目第一篇——个性化控件(View)篇
  5. android sdk无法更新怎么办?如何解决
  6. Android界面设计
  7. Android获取手机当前连接的WiFi信息(SSID,IP,连接状态)
  8. 【Android(安卓)开发教程】隐藏Activity的标题
  9. android adt 最新下载地址

随机推荐

  1. App"确定"按钮应该在左边还是右边?
  2. 好用漂亮的Android(安卓)表格框架
  3. Android之消息推送实现
  4. android之ViewFlipper实现左右滑动动画效
  5. Android学习笔记之Android包、ADB介绍
  6. 一份关于 Java、Kotlin 与 Android(安卓)
  7. Android消息处理系统——Looper、Handler
  8. TextView文字阴影效果以及styles文件的使
  9. Android:使用VideoView(TV显示屏待机状态,循
  10. 注意android裁图的Intent action