Обработка таймаутов сети в Java - PullRequest
0 голосов
/ 06 января 2010

У меня есть Java-программа для подключения к серверу по протоколу xot.

Моя библиотека, которую я использую, может обработать тайм-аут соединения, но не существует метода, подобного setSoTimeout () для обработки тайм-аута при отправке и получении данных.

так что любой может предложить мне какое-то решение этой проблемы.

спасибо

Quan

Ответы [ 2 ]

0 голосов
/ 06 января 2010

'Socket.setSoTimeout ()' должно также применяться к recv. Смотрите его Javadoc .

public void setSoTimeout (int timeout) создает исключение SocketException

Enable/disable SO_TIMEOUT with the specified timeout, in milliseconds.

Если для этой опции задано ненулевое значение тайм-аут, вызов read () InputStream связан с этим Сокет будет блокировать только на эту сумму времени. Если время ожидания истекло, java.net.SocketTimeoutException поднял, хотя гнездо все еще действительный. Опция должна быть включена до входа в блокировку операция, чтобы иметь эффект. Тайм-аут должно быть> 0. Тайм-аут нуля интерпретируется как бесконечный тайм-аут.

0 голосов
/ 06 января 2010

Один из вариантов - создать поток для записи и join(timeout). Аналогично с чтением из связи. Очевидно, что уничтожение потока (и обработка соединения как неопределенного состояния) по истечении времени ожидания (в отличие от прекращения потока).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...