0

特定の開いているポート (5050) の範囲内のすべての IP をスキャンし、開いている場合はログにメッセージを書き込むアプリを作成しようとしています。

コードはこちら:

public void run(){
        for(int i=0;i<256;i++)
        {
            Log.d("NetworkScanner","attemping to contact 192.168.1."+i);
            try {
                Socket socket=new Socket(searchIP+i,5050);
                possibleClients.add(searchIP);
                socket.close();

                Log.d("NetworkScanner"," 192.168.1."+i+" YEAAAHHH");

            } catch (UnknownHostException e) {

                Log.d("NetworkScanner"," 192.168.1."+i+" unavailable");
            } catch (IOException e) {
                e.printStackTrace();
            }

        }

    }

編集: ここに新しい問題があります: ホストがポートを開かずにオンラインで見つかった場合でも、スキャンプロセス (for ループ) は次に移動する前に長時間スタックします。また、各ホストのスキャンにはかなりの時間がかかります!

最終的な解決策は、デフォルトのコンストラクターで Socket オブジェクトを作成し、ホストの InetAddr オブジェクトを作成してから、ソケット API の Connect(InetAddr,timeout) 関数をミリ秒単位 (約 300ms) のタイムアウトで使用することでした。 300 ミリ秒以下 (200 ミリ秒未満ではエラーが発生する可能性があります) とマルチスレッド化による並列スキャンにより、範囲内のすべての IP を 5 秒でスキャンできます。

4

2 に答える 2

0

「break;」を削除します...反復を停止します。

于 2013-04-03T16:50:51.843 に答える