java сокет через некоторое время (используя пул потоков) - PullRequest
0 голосов
/ 05 марта 2020

Я пишу программу, в которой мне нужно отправить несколько 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);

                }
...