Дорогие друзья здесь, я хочу, чтобы код устанавливал время для ответа от заданного 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);
}
}
до тех пор, пока данные будут получены, он не будет тайм-аут в соответствии с javadocs
Вы можете изменить свой цикл
long se = System.currentTimeMillis();
while ((inputLine = in.readLine()) != null)
{
fullline = fullline.concat(inputLine);
if ( System.currentTimeMillis() > se + 10000) {
throw new IOException ();
}
}
API говорит, что
"если истечет время ожидания до того, как будут доступны данные для чтения"
это означает, что, как только данные станут доступными для загрузки, соединение не будет отключено. Если серверу требуется более 10 секунд, чтобы даже начать отправку данных обратно клиенту, когда время ожидания срабатывает.
Также проверьте тайм-аут на сервере. Потому что, когда вы пытаетесь загрузить большой файл через 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();
}