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 个)线程,从而将总时间减少两个数量级。使用Executors类创建线程池并为每个主机提交一个任务。

请记住,serverList集合必须是线程安全的。使用shutdown()awaitTermination()配对等待结果。或者用于CompletionService在结果到达时收集结果。

于 2012-10-04T21:37:03.423 回答
0

使用new Socket()(无参数),然后Socket.connect()用短暂的超时调用,比如几秒钟。

于 2012-10-04T22:17:19.563 回答