安卓实现Ping网段功能

一.什么是Ping

Ping是Windows、Unix和Linux系统下的一个命令,ping也属于一个通信协议,是TCP/IP协议的一部分。
利用“ping”命令可以检查网络是否连通,可以很好地帮助我们分析和判定网络故障。
Ping发送一个ICMP(Internet Control Messages Protocol)即因特网信报控制协议,回声请求消息给目的地并报告是否收到所希望的ICMP echo (ICMP回声应答),用来检查网络是否通畅或者网络连接速度的命令。广义来说即发送一个数据包,根据返回的数据包得到丢包率及平均时间得出网络的连接状态。
ping命令可以用在android中检测网络ip或者socket的连接,命令格式:ping ip地址(最简)
ping具有一些参数,可以具体定义包的个数、包的最大存活时间等。

二.具体参数

三.代码实现

/*测试Ping ip地址 无法ping:192.155.1.14 可以:192.168.1.41*/
new Ping().execute("www.baidu.com");
    public class Ping extends AsyncTask<String, Boolean, Boolean> {
        @Override
        protected Boolean doInBackground(String... strings) {
            try {
                Process p = Runtime.getRuntime().exec("ping -c 1 -w 3 " + strings[0]);
                InputStream input = p.getInputStream();
                InputStreamReader isr = new InputStreamReader(input);
                BufferedReader br = new BufferedReader(isr);
                String line;
                StringBuilder builder = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    builder.append(line);
                }
                br.close();
                isr.close();
                input.close();
                br.close();
                Logs.i("返回的数据:"+builder+"  对比:"+builder.toString().contains("ttl"));
                /*如果Ip地址Ping成功后数据里面会有ttl这个数据,所以对比这个字符串即可*/
                return builder.toString().contains("ttl");
            } catch (MalformedURLException e) {
                Logs.e(e.toString());
                return false;
            } catch (IOException e) {
                Logs.e(e.toString());
                return false;
            }
        }


        @Override
        protected void onPostExecute(Boolean isPing) {
            Logs.v("Ping的结果:" + isPing);
            if(isPing){
                /*设备Ip地址ping成功后向后台发送数据*/
                if (!TextUtils.isEmpty(cllx)) {
                    if (INSPECT_START.equals(cllx)) {
                        //查验开始
                        inspectStart();
                    } else if (INSPECT_END.equals(cllx)) {
                        //查验结束
                        inspectEnd();
                    }
                }
//                DialogNoticeUtil.show(RequestAction.this,"执法记录仪连接成功");
            }else {
                DialogNoticeUtil.show(RequestAction.this,"执法记录仪连接失败");
            }
        }
    }

四.日志打印数据

2019-12-17 16:16:27.615 10436-10454/? I/lcb: 返回的数据:PING 192.155.1.14 (192.155.1.14) 56(84) bytes of data.--- 192.155.1.14 ping statistics ---3 packets transmitted, 0 received, 100% packet loss, time 2004ms

 对比:false
2019-12-17 16:28:26.812 11066-11084/com.tmri.enforcement.app I/lcb: 返回的数据:PING www.a.shifen.com (183.232.231.172) 56(84) bytes of data.64 bytes from localhost (183.232.231.172): icmp_seq=2 ttl=56 time=20.6 ms--- www.a.shifen.com ping statistics ---2 packets transmitted, 1 received, 50% packet loss, time 1005msrtt min/avg/max/mdev = 20.636/20.636/20.636/0.000 ms  

对比:true
 

发布了236 篇原创文章 · 获赞 48 · 访问量 20万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章