Я пишу программу, в которой мне нужно отправить несколько HTTP-запросов на множество доменов, используя сокет. Я использовал пул потоков и сокет. Когда я запускаю программу, она запускается быстро, затем она замедляется, наконец, останавливается (терминал все еще работает ) вот код:
public class HttpRequest implements Runnable{
private String url;
private Socket s;
public boolean scanned;
private String extension;
public HttpRequest(String url,String extension) throws UnknownHostException, IOException {
this.url=url;
this.extension=extension;
s=new Socket(url,80);
//
//s.setSoTimeout(600000);
}
public void run() {
String data="";
String html="";
try {
PrintWriter p=new PrintWriter(s.getOutputStream(),true);
p.println("GET /"+extension+" HTTP/1.1");
p.println("Host:"+url);
p.println("");
BufferedReader r= new BufferedReader(new InputStreamReader(s.getInputStream()));
if(r.readLine().indexOf("200 OK")!=-1) {
while ((data=r.readLine())!=null) {
html+=data;
Document d =Jsoup.parse(html);
Element form=d.select("form").first();
String value=form.attr("enctype");
if(value=="multipart/form-data") {
System.out.println("value is :"+value);
System.out.println(" found"+this.url+"/"+extension);
}
System.out.println(d.title() + this.url+"/"+extension+" "+Thread.currentThread().getName());
}}
else {
System.out.println("failed => "+this.url +"/"+ extension +" "+Thread.currentThread().getName());
}
s.close();
//}
}catch(Exception e) {
}
}
}
вот основной
// у меня есть массив доменов, содержащий URL-адреса, для которых я сделаю запрос на
ExecutorService exe= Executors.newFixedThreadPool(40);
for (int i =0 ; i <= domains.length-1; i++) {
h=new handeler(domains[i]);
exe.execute(h);
}