Тайм-аут получения запроса, даже если тайм-аут соединения и тайм-аут чтения установлены по умолчанию (бесконечно)?

Я подключаюсь к веб-службе и не установил таймаут подключения и тайм-аут чтения на HttpURLConnection. Что такое время ожидания подключения по умолчанию и время ожидания чтения? Это зависит от телефона Android? Или Android/ Java имеет собственное значение по умолчанию для тайм-аута?

Когда я пытаюсь получить значение моего времени ожидания подключения (getConnectTimeout()) и прочитайте тайм-аут (getReadTimeout()), он возвращает значение 0, которое я предполагаю эквивалентно бесконечности. Однако, хотя их значение равно 0, иногда я получаю сообщение об ошибке тайм-аута запроса. Поэтому их значение не может быть равным бесконечности. Может ли кто-нибудь просветить меня об этом?

3 ответа

Решение

Вы делали какие-либо исследования? Значения по умолчанию подробно описаны в документации. Вот соответствующие части:

public void setConnectTimeout (int timeout) Начиная с: Уровень API 1

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

public void setReadTimeout (int timeout) Начиная с: Уровень API 1

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

Также есть эта заметка по таймаутам:

URLConnection поддерживает два тайм-аута: тайм-аут соединения и тайм-аут чтения. По умолчанию операции никогда не прекращаются.

Возможно, сервер подключается к вашему клиенту.

Если getConnectTimeout а также getReadTimeout от объекта вернуть ноль, то это действительно означает бесконечность. Это унаследовано от основного URLConnection учебный класс.

Возможно, что полученное вами исключение не является SocketTimeoutException В общем, вы должны это проверить - можно получить IOException выбрасывается независимо от настроек тайм-аута.

Javadoc для connect() это неверно. Ноль дает вам время ожидания подключения к платформе, которое не бесконечно, а составляет около минуты. Вы можете только уменьшить это значение с timeout параметр для connect(), не увеличивайте это.

Другие вопросы по тегам