Http Connection Read Timeout

1

Дорогие друзья здесь, я хочу, чтобы код устанавливал время для ответа от заданного URL, в частности, в считанные секунды, иначе это должно быть ошибка

Здесь я прикрепил свой код, который имеет 730 МБ Iso файл загрузки страницы, его минимум занимает 30 минут для меня. Здесь я даю всего 10 секунд, чтобы загрузить файл и получить ответ с этой страницы. Я уверен, что 30 минут загрузки файла он не даст ответа всего за 10 секунд, но здесь он дает правильный ответ.

пожалуйста, проверьте мой код здесь и сообщите мне, где я ошибся.

public class test {

    public static void main(String[] args) throws ClientProtocolException, IOException {
        // TODO Auto-generated method stub
        nodeBIT("");
    }
    private static void nodeBIT(String string) throws ClientProtocolException, IOException {
        String url1 = "http://download.microsoft.com/download/e/e/9/ee9d0116-c9fe-4fc2-b59c-406cbfb6d515/xpsp3_5512.080413-2113_usa_x86fre_spcd.iso";
        URL obj = new URL(url1); URLConnection con = obj.openConnection(); 
        con.setConnectTimeout(10000); 
        con.setReadTimeout(10000); // 10 seconds to read the file
        InputStreamReader input = new InputStreamReader(con.getInputStream()); 
        BufferedReader in = new BufferedReader(input);
        String inputLine;
        String fullline = "";
        while ((inputLine = in.readLine()) != null)
        { 
            fullline = fullline.concat(inputLine); 
        } 
        System.out.println(fullline);

    }
}
  • 0
    до тех пор, пока данные не будут получены, время ожидания не будет
Теги:
servlets
swing
java-ee
urlconnection

3 ответа

2
Лучший ответ

до тех пор, пока данные будут получены, он не будет тайм-аут в соответствии с javadocs

Вы можете изменить свой цикл

    long se = System.currentTimeMillis();
    while ((inputLine = in.readLine()) != null)
    { 
        fullline = fullline.concat(inputLine); 
        if ( System.currentTimeMillis() > se + 10000) {
             throw new IOException ();
        }
    } 
  • 0
    Что такое "se" здесь в if (System.currentTimeMillis ()> se + 10000) {
  • 0
    хорошее определение - исправлено
2

API говорит, что

"если истечет время ожидания до того, как будут доступны данные для чтения"

это означает, что, как только данные станут доступными для загрузки, соединение не будет отключено. Если серверу требуется более 10 секунд, чтобы даже начать отправку данных обратно клиенту, когда время ожидания срабатывает.

-1

Также проверьте тайм-аут на сервере. Потому что, когда вы пытаетесь загрузить большой файл через JAVA, какой-то сервер времени дает исключение тайм-аута.

вот еще один пример кода для загрузки данных с сервера на приложение с использованием FTP.here я использовал два списка remoteFileList, localFileList, чтобы предоставить файл sourse и локальные пути к файлам.

            FTPClient ftpClient = new FTPClient();
        ftpClient.connect(Constant.FTP_SERVER_IP);
        ftpClient.login(Constant.FTP_USER_NAME, Constant.FTP_PASSWORD);

        ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
        ftpClient.enterLocalPassiveMode();

        int reply = ftpClient.getReplyCode();
        if (FTPReply.isPositiveCompletion(reply)) {
            System.out.println("Connection Succeeded");
            for (int i = 0; i < remoteFileList.size(); i++) {
                remoteFileName = remoteFileList.get(i);
                localFileName = localFileList.get(i);
                File localFile = new File(localFileName);
                if (localFile.exists()) {
                    System.out.println("File Already Exists!!");
                } else {
                    downloadFile = new FileOutputStream(localFile);
                    boolean isDownloaded = ftpClient.retrieveFile(remoteFileName, downloadFile);
                    System.out.println("Downloaded");
                    if (isDownloaded) {
                       System.out.println(" - Success.\n");
                    } else {
                       System.out.println( " - Unsuccess.\n");
                    }

                }
                if (i == remoteFileList.size() - 1 && this.DownloadType == 1) {
                    System.out.println("This is time to open !");
                    JOptionPane.showMessageDialog(this, "Image downloading completed.Please open the inspection");
                }
            }
        } else {
            ftpClient.disconnect();
        }
  • 0
    ты прочитал вопрос?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню