簡體   English   中英

如何在Android(JAVA)的WiFi網絡中發現主機

[英]How to discover host in a WiFi network in Android (JAVA)

我正在開發一個Android應用程序,我必須發現WiFi網絡中的每個主機,並且實現了一項功能,可以“ ping”某個網絡的1到255之間的所有IP地址。

此解決方案可以正常工作,但是有一個問題,執行時間。每次我啟動應用程序時,我等待大約256秒,這太長了,我等不及了。

這是我的源代碼(我在Stack上找到了此代碼,我修改了代碼以使其在我的情況下可以正常工作):

public class ScanNetwork {

    ArrayList < String > hosts;

    int i;
    boolean finish = false;
    public ArrayList < String > ScanNetwork(String ipAddress) {

        hosts = new ArrayList < String > ();
        final String subnet = ipAddress.substring(0, ipAddress.lastIndexOf("."));

        for (i = 0; i < 256; i++) {
            String currentHost = subnet + "." + i;
            Process p1 = null;
            int returnVal = 0;
            try {
                p1 = Runtime.getRuntime().exec("ping -w 50 -c 1 " + currentHost);
                returnVal = p1.waitFor();
            } catch (IOException e) {
                System.out.println("Log: " + e.toString());
            } catch (InterruptedException e) {
                System.out.println("Log: " + e.toString());
            }

            boolean reachable = (returnVal == 0);
            if (reachable) {

                if (!hosts.contains(currentHost)) {
                    hosts.add(currentHost);
                    System.out.println(currentHost);

                }
            }
        }
        return hosts;
    }
}

該源代碼是完美的,但是執行時間過長,還有其他方法來獲取網絡中的所有主機嗎?

我該如何解決這個問題?

我看到的問題是,您正在按順序執行所有ping操作-循環將大部分時間都花在等待答復上。 嘗試啟動一些AsyncTask,每個AsyncTask都有分配的地址范圍進行搜索,並使其並行工作。

請注意,對於典型的192.168.1.x網絡,“。0”(全0位)“。255”(全1位)將不對應於主機,也不需要檢查。

另外請不要忘記,並非每個人都對ping做出響應(在公司網絡中這種可能性更大,而在家中的可能性較小)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM