网络监测

最近做的项目要网络监测,看能不能ping通下位机,可让我一顿好找。因为我用模拟器测试的,发现电脑用cmd可以ping通,但是用软件就死活不行,下位机一直说必须用ping命令。下面直接上代码:

public class Ping extends AsyncTask {
    @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();
            Logger.i("返回的数据:"+builder+"  对比:"+builder.toString().contains("ttl"));
            /*如果Ip地址Ping成功后数据里面会有ttl这个数据,所以对比这个字符串即可*/
            return builder.toString().contains("ttl");
        } catch (MalformedURLException e) {
            Logger.e(e.toString());
            return false;
        } catch (IOException e) {
            Logger.e(e.toString());
            return false;
        }
    }
    @Override
    protected void onPostExecute(Boolean isPing) {
        Logger.v("Ping的结果:" + isPing);
        if (isPing) {
            BaseActivity.number = 0;
        } else {
            Logger.d("失败" + BaseActivity.number);
            BaseActivity.number++;
            if (BaseActivity.number > 3) {
                BaseActivity.in(BaseActivity.number);
            }
        }
    }
}

使用方法

  new Thread(new Runnable() {
            @Override
            public void run() {
                //需要在子线程中处理的逻辑
                while (true) {
                    try {
                        Thread.sleep(5000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    new Ping().execute("192.168.88.82");

                }
            }
        }).start();

你可能感兴趣的:(网络监测)