远程主机终止了Java中的握手

问题描述

我编写了获取站点状态代码代码,但是当我连接到VPN时,一个站点返回了远程主机终止了握手,而没有VPN没有错误,它返回了200作为其他站点。你有什么主意吗?代码在下方共享

public class Main {

public static void checkSites() {

    try {
        File links = new File("./linkler.txt");
        Scanner scan = new Scanner(links);
        ArrayList<String> list = new ArrayList<>();
        while (scan.hasNext()) {
            list.add(scan.nextLine());
        }
        File linkStatus = new File("LinkStatus.txt");
        if (!linkStatus.exists()) {
            linkStatus.createNewFile();
        } else {
            System.out.println("File already exists");
        }
        BufferedWriter writer = new BufferedWriter(new FileWriter(linkStatus));
        for (String link : list) {
            try {
                if (!link.startsWith("http")) {
                    link = "http://" + link;
                }
                URL url = new URL(link);
                HttpURLConnection.setFollowRedirects(true);
                HttpURLConnection http = (HttpURLConnection) url.openConnection();
                http.setRequestMethod("HEAD");
                http.setConnectTimeout(10000);
                http.setReadTimeout(10000);

                int statusCode = http.getResponseCode();
                if (statusCode == 403) { // If HTTP status code returns 403,this block of code will check the site 3 times. It makes sleep to thread 10 seconds,15 seconds and 100 seconds stepwise.
                    Thread.sleep(10000);
                    int tryAgainLater = 1;
                    while (tryAgainLater <= 3) {
                        try {
                            if (!link.startsWith("http")) {
                                link = "http://" + link;
                            }
                            url = new URL(link);
                            HttpURLConnection.setFollowRedirects(true);
                            http = (HttpURLConnection) url.openConnection();
                            http.setRequestMethod("HEAD");
                            http.setConnectTimeout(5000);
                            http.setReadTimeout(8000);
                            http.disconnect();
                            System.out.println(link + " " + statusCode);
                            writer.write(link + " " + statusCode);
                            writer.newLine();
                        } catch (Exception e) {
                            writer.write(link + " " + e.getMessage());
                            writer.newLine();

                            System.out.println(link + " " + e.getMessage());
                        }
                        if (tryAgainLater == 1) {
                            System.out.println("Second time program tries to get response code");
                            Thread.sleep(15000);
                        }
                        if (tryAgainLater == 2) {
                            System.out.println("Third time program tries to get response code");
                            Thread.sleep(100000);
                        }
                        if (tryAgainLater == 3) {
                            System.out.println("403 HTTP code hasn't broken.");
                        }
                        ++tryAgainLater;
                    }
                }

                http.disconnect();  // It helps to increasing speed of code.
                System.out.println(link + " " + statusCode);
                writer.write(link + " " + statusCode);
                writer.newLine();
            } catch (Exception e) {
                writer.write(link + " " + e.getMessage());
                writer.newLine();

                System.out.println(link + " " + e.getMessage());
            }
        }
        try {
            writer.close();

        } catch (Exception e) {
            System.out.println(e.getMessage());
        }


    } catch (Exception e) {
        System.out.println(e.getMessage());
    }


}

public static void main(String[] args){


    Timer myTimer = new Timer();

    TimerTask sendingRequest = new TimerTask() {
        int loopTeller = 1;

        public void run() {
            checkSites();
            System.out.println("Loop has ended " + loopTeller + " time(s).");
            loopTeller++;
        }
    };
    myTimer.schedule(sendingRequest,20000);
}

我检查了与该主题相关的问题,但这些答案无法解决我的问题。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)