2016-05-31 23 views
0

私はAndroidアプリケーションを開発しています。WiFiネットワーク内の各ホストを検出する必要があります。特定のネットワークの255。Android(JAVA)のWiFiネットワークでホストを検出する方法

このソリューションは完全に動作しますが、問題はありますが、実行時間..アプリケーションを開始するたびに、私は約256秒待っています。

これは、(私はスタック上でこのコードを見つけ、私は私の状態で動作するようにコードを修正)私のソースコードです:

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; 
    } 
} 

このソースコードは完璧ですが、実行時間が過剰で、他があります方法はネットワーク内のすべてのホストを取得するには?

どうすればこの問題を解決できますか?

+0

(これは自宅で少ないので、企業ネットワーク内の可能性が高い)ではない、誰もがpingに応答することを忘れないでください36277912/how-to-scan-ip-in-android/36278723#36278723)。それはあなたを助けるかもしれません。タイムアウトを5から20に増やしてください。ローカルネットワーク内のすべての 'IP 'が得られます。 –

答えて

0

私が見ている問題は、すべてのピングを連続して実行していることです。ループは応答を待っている時間のほとんどを費やしています。検索するアドレス範囲が割り当てられたAsyncTaskをいくつか起動し、並行して動作させてみてください。

典型的な192.168.1.xネットワークでは、 ".0"(すべて0ビット) ".255"(すべて1ビット)はホストに対応しないため、チェックする必要はありません。

はまた、この[リンク](http://stackoverflow.com/questions/を参照してください

+0

私のアイデアはマルチスレッドの実装でしたが、あなたのソリューションと同様に、さまざまなスレッドが多数の "スキャン"を管理することになります。しかし、残念ながら私はこのソリューションの自動スレッドの作成と終了を管理する方法を理解することができません – Elisa

+0

AsyncTaskはスレッドの作成と終了、およびタスクとの間で情報の受け渡しを処理します。たとえば、このスレッドのアドレス範囲を渡してチェックし、onProgressUpdate()またはonPostExecute()を使用して結果をUIスレッドに返すことができます –

関連する問題