在Android中ping IP列表

在Android中ping IP列表,第1张

概述我正在编写一个 Android APP. 我有一个活动负责Pinging 254 IPv4并在点击按钮“自动扫描”时将连接的机器放入数据库表(放入ip). // ———————————————— ——————— 首先我得到本地IP(例如192.168.1.8),然后当点击按钮时,我从ip中提取一个subString(这个例子为192.168.1.)然后开始ping所有IP,从“192.168.1. 我正在编写一个 Android APP.

我有一个活动负责Pinging 254 IPv4并在点击按钮“自动扫描”时将连接的机器放入数据库表(放入ip).
// ———————————————— ———————

首先我得到本地IP(例如192.168.1.8),然后当点击按钮时,我从ip中提取一个subString(这个例子为192.168.1.)然后开始Ping所有IP,从“192.168.1.1”开始完成“192.168.1.254”.每次Ping之后,我都会做一个测试,知道Ping是成功还是失败,如果成功,那么我把那个ip放在数据库表中,然后最后我在列表视图中显示连接的IP列表.
// ———————————————— ———————

问题是Pinging任务花了太长时间才完成(大约15分钟或更长时间!!),这很疯狂.
我试图使用InetAddress.isReachable()它很快,但它找不到使用windows的计算机,所以我改为使用Process&调用Runtime.getRuntime().EXEC(CMD).

在androID代码下面:

class MyTask extends AsyncTask<String,Integer,VoID> {             Dialog dialog;    Progressbar progressbar;    TextVIEw tvLoading,tvPer;    button btnCancel;    @OverrIDe    protected VoID doInBackground(String... params) {        Thread.currentThread().setPriority(Thread.MAX_PRIORITY);        String s="",address = params[0];        int index=0,j=0,count=0;        //on prend le dernIEr index du char "."        final StringBuilder ss = new StringBuilder(address);        index = ss.lastIndexOf(".");        //on prend une souschaîne qui contIEnt l'ipv4 sans le dernIEr nombre        s = address.substring(0,index+1);        //Tester tous les adresses Ipv4 du même plage d'adresses        for(int i=1; i<255; i++){            if (isCancelled()) {                break;            }            if(testPing(s+""+i+"")){                insertIPv4(s+""+i+"");}            count++;            if(count == 5 && j<100){                count=0;                j+=2;                publishProgress(j);            }        }        return null;    }    @OverrIDe    protected voID onPostExecute(VoID result){        super.onPostExecute(result);        dialog.dismiss();        AlertDialog alert = new AlertDialog.Builder(Gestion_Machines.this)                .create();        alert.setTitle("Terminé");        alert.setMessage("Operation Terminé avec Succés");        alert.setbutton("OK",new DialogInterface.OnClickListener() {            @OverrIDe            public voID onClick(DialogInterface dialog,int which) {                dialog.dismiss();            }        });        alert.show();    }    @OverrIDe    protected voID onPreExecute() {        super.onPreExecute();        dialog = new Dialog(Gestion_Machines.this);        dialog.setCancelable(false);        dialog.requestwindowFeature(Window.FEATURE_NO_Title);        dialog.setContentVIEw(R.layout.progressdialog);        progressbar = (Progressbar) dialog.findVIEwByID(R.ID.progressbar1);        tvLoading = (TextVIEw) dialog.findVIEwByID(R.ID.tv1);        tvPer = (TextVIEw) dialog.findVIEwByID(R.ID.tvper);        btnCancel = (button) dialog.findVIEwByID(R.ID.btncancel);        btnCancel.setonClickListener(new OnClickListener() {            @OverrIDe            public voID onClick(VIEw v) {                objMyTask.cancel(true);                dialog.dismiss();            }        });        dialog.show();    }    @OverrIDe    protected voID onProgressUpdate(Integer... values) {        super.onProgressUpdate(values);        progressbar.setProgress(values[0]);        tvLoading.setText("Loading...  " + values[0] + " %");        tvPer.setText(values[0]+" %");    }}

和Ping的方法:

public boolean testPing(String x){        int exit=22;        Process p;        try {            //.....edited line.....             p = Runtime.getRuntime().exec("Ping -c1 -W1 "+x);            //make shure that is -W not -w it's not he same.             p.waitFor();            exit = p.exitValue();            p.destroy();        } catch (IOException ee) {            ee.printstacktrace();        } catch (InterruptedException e) {            e.printstacktrace();        }        if (exit == 0) {            return true;        }else{            return false;        }    }
解决方法 我在网上搜索,我发现在java中,有些人使用了一个名为“fPing”的命令,它接受超时选项(-t)和毫秒.但androID(shell)中的Ping命令只能接受秒的超时.所以,对于我的情况,洞 *** 作应该花费254秒,不错……但不完美.

public boolean testPing(String x){    int exit=22;    Process p;    try {        //.....edited line.....         p = Runtime.getRuntime().exec("Ping -c1 -W1 "+x);        //make shure that is -W not -w it's not he same.         p.waitFor();        exit = p.exitValue();        p.destroy();    } catch (IOException ee) {        ee.printstacktrace();    } catch (InterruptedException e) {        e.printstacktrace();    }    if (exit == 0) {        return true;    }else{        return false;    }}
总结

以上是内存溢出为你收集整理的在Android中ping IP列表全部内容,希望文章能够帮你解决在Android中ping IP列表所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1125005.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存