public class IPTest5 {
public static void main(String[] args) {
ExecutorService threadpool = Executors.newFixedThreadPool(10);
IPDB db = new IPDB();
IPTest5 test = new IPTest5();
for(int i=0;i<=255;i++){
for(int j=0;j<=255;j++){
String ip = "192.168."+i+"."+j;
threadpool.execute(test.new IPRun(ip,db));
}
}
threadpool.shutdown();
System.out.println(threadpool.isShutdown());
if(threadpool.isShutdown())
System.out.println("执行完了");
}
private class IPRun implements Runnable{
private String ip;
private IPDB db;
public IPRun(String ip,IPDB db){
this.ip = ip;
this.db = db;
}
public void run(){
InetSocketAddress isa = new InetSocketAddress(ip,80);
Socket s = new Socket();
try {
s.connect(isa,70);
db.insert(ip);
System.err.println(ip);
} catch (SocketTimeoutException e) {

/*try {
s.connect(isa,70);
db.insert(ip);
System.err.println(ip);
} catch (SocketTimeoutException e1) {
try {
s.connect(isa,70);
db.insert(ip);
} catch (IOException e2) {
System.out.println("连接失败!"+ip);
}
} catch(IOException e1){
System.out.println("结局不了");
}*/
} catch(IOException e){
System.out.println(ip+"连接失败!");
}
}
}
}
连接主机获取80端口ip,为什么
for(int i=0;i<=255;i++){
for(int j=0;j<=255;j++){
String ip = "192.168."+i+"."+j;
threadpool.execute(test.new IPRun(ip,db));
}
}
一次下来,connect只能连接到第一个for循环的0到4的ip,后面全部连不上,不是因为80端口服务没有开启,若将第一个for改成for(int i=5;i<=255;i++)则能连接到5到10的80端口ip主机,这是为什么真的不懂socketjavaip

解决方案 »

  1.   

    你产生了这么多线程干什么? 255*255个,估计是死掉了。        for (int i = 1; i <= 255; i++) {
                for (int j = 1; j <= 255; j++) {
                    try {
                        String ip = new StringBuilder("192.168.").append(i).append(".").append(j).toString();
                        Socket socket = new Socket();
                        socket.connect(new InetSocketAddress(ip, 80), 100);
                        System.out.println(ip);
                    } catch (IOException e) {
                    }
                }
            }看看能不能帮你找到那些IP地址。