Как я могу установить тайм-аут против BufferedReader, основанного на URLConnection в Java?

Xamarin Forms имеет встроенный элемент управления Map . TKCustomMap - сторонний рендерер, который добавляет функциональность встроенной карте.

10
задан dacracot 18 September 2008 в 15:00
поделиться

4 ответа

Я думаю, что URLConnection.setReadTimeout - то, что Вы ищете.

12
ответ дан 3 December 2019 в 20:07
поделиться

Я работал над этой проблемой в среде JVM 1.4 просто недавно. Ответ запаса должен использовать системные свойства sun.net.client.defaultReadTimeout (тайм-аут чтения) и/или sun.net.client.defaultConnectTimeout. Они документируются в Сетевых Свойствах и могут быть установлены через-D аргумент на командной строке Java или через вызов метода System.setProperty.

Предположительно, они кэшируются реализацией, таким образом, Вы не можете изменить их от одной вещи до другого так один, они используются однажды, значения сохраняются.

Также они действительно не работают на крыло соединений SSL HttpsURLConnection. Существуют другие способы иметь дело с тем использованием пользовательского SSLSocketFactory.

Снова, все это относится к JVM 1.4.x. В 1,5 и выше Вас имеют больше методов в наличии для Вас в API (как отмечено другими респондентами выше).

1
ответ дан 3 December 2019 в 20:07
поделиться

Начиная с Java 1.5 возможно установить тайм-аут чтения в миллисекундах на базовом сокете через 'setReadTimeout (международный тайм-аут)' метод на классе URLConnection.

Обратите внимание, что существует также 'setConnectTimeout (международный тайм-аут)', который сделает то же самое для начального соединения с удаленным сервером, таким образом, будет важно установить это также.

2
ответ дан 3 December 2019 в 20:07
поделиться

Если у Вас есть java 1.4:

Я принимаю тайм-аут соединения (URLConnection.setConnectTimeout(int timeout) ) бесполезно, потому что Вы делаете некоторую потоковую передачу.

---Не уничтожайте поток---, Он может вызвать неизвестные проблемы, открытые дескрипторы, и т.д.

Породите java.util. TimerTask, где Вы проверите, закончили ли Вы процесс, иначе, закрывают BufferedReader и OutputStream URLConnection

Вставьте булев флаг isFinished и набор это к истинному в конце Вашего цикла и ко лжи перед циклом

TimerTask ft = new TimerTask(){
   public void run(){
     if (!isFinished){
       urlConn.getInputStream().close();
      urlConn.getOutputStream().close();
     }
   }
};

(new Timer()).schedule(ft, timeout);

Это, вероятно, вызовет ioexception, таким образом, необходимо будет поймать его. Исключением не является плохая вещь сам по себе. Я опускаю некоторые объявления (т.е. финал), таким образом, анонимный класс может получить доступ к Вашим переменным. В противном случае затем создайте POJO, который поддерживает ссылку, и передайте это timertask

3
ответ дан 3 December 2019 в 20:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: