0

サブネットからIP範囲をスキャンしたいのですが。特定のポートで聞こえるIPアドレスを保存したいと思います。私はこのコードを使用します:

        for (int host = 1; host < 255; host++) {
            String ip = networkAddress + host;

            Socket socket;
            try {
                socket = new Socket(ip, port);
                System.out.println(ip + "  +");
                serverList.add(ip);
                socket.close();
            }
            catch (Exception e) {
                System.out.println(ip + "  -");
            }
        }

しかし、私の問題は、時間がかかりすぎることです...もっと速い方法はありますか?

4

2 に答える 2

1

マルチティーディングを使用します。ほとんどの時間は実際には応答の待機に費やされるため、100(または200)のスレッドを安全に作成でき、合計時間を2桁短縮できます。クラスを使用Executorsしてスレッドプールを作成し、ホストごとに1つのタスクを送信します。

その場合、serverListコレクションはスレッドセーフである必要があることに注意してください。を使用shutdown()してawaitTermination()ペアリングし、結果を待ちます。CompletionServiceまたは、到着時に結果を収集するために使用します。

于 2012-10-04T21:37:03.423 に答える
0

new Socket()(引数なしで)を使用Socket.connect()してから、短いタイムアウト、たとえば数秒で呼び出します。

于 2012-10-04T22:17:19.563 に答える