Android 单线程也能极速刷新并获取局域网设备(IP+MAC)信息, 从4分30S 优化到 0.150S 不是梦

这篇博客介绍了如何使用Android的UDP通信方式优化获取局域网设备IP和MAC信息的过程,从而将耗时从4.5秒降低到0.15秒。作者分析了传统的ping方法的不足,并通过UDP避免等待响应,实现了快速扫描。在某些IP通信时遇到延迟,作者提出了解决方案并提供了轮询查找的策略。
摘要由CSDN通过智能技术生成

            提前说明,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的响
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值