提前说明,Android 获取局域网在线设备的大概原理是:先去检测某ip是否能通信,然后去 /proc/net/arp 文件(简称arp文件)下读取里面正确的mac 与 ip 。
最近产品又提需求了,要显示当前局域网所在的设备数量以及相关IP和mac信息,心里YY一笑,这种功能太简单,
以前也研究过,只是方法(ping)比较耗时,我就把这情况告诉了产品,建议加个正在获取的效果,产品否决,获取过程
不能超过3s,话说用Ping方法在3s内要拿到结果,我得开几十个线程才行吧,果断放弃了这个想法,毕竟不是PC应用,
先上一个ping的方法
private void pingIp(String ip){
try {
java.lang.Process process = Runtime.getRuntime().exec("ping -c 1 -w 10 " + ip);
process.waitFor();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
这就是ping方法 在单线程下,从 ip尾段 2~254 全部ping完,最少也要4分多,waitFor()方法是耗时的,它需要等待ping的响