我想扫描子网中的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 + " -");
}
}
但我的问题是需要花费太多时间...... 有没有更快的方法?
答案 0 :(得分:1)
使用多线程。由于大部分时间实际上都花在等待响应上,因此您可以安全地创建100个(甚至200个)线程,将总时间减少两个数量级。使用Executors
类创建一个线程池,并为每个主机提交一个任务。
请记住,serverList
集合必须是线程安全的。使用shutdown()
和awaitTermination()
对等待结果。或者,使用CompletionService
收集结果。
答案 1 :(得分:0)
使用new Socket()
(无参数),然后用短暂的超时时间调用Socket.connect()
,比如几秒钟。