2016-11-28 3 views
0

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

+0

Я видел о функции setSoTimeOut (2000), которая закрывает сокет после указанного интервала времени, но я хотел бы закрыть только в том случае, если сокет остается бездействующим в течение указанного интервала. –

+0

* он остается бездействующим в течение более указанного интервала * - какова ваша логика для этого? –

+0

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

ответ

0

я искал по сети об этом

Почему? Javadoc существует. Поиск не требуется.

Я обнаружил, что функция, которая используется для закрытия сокета после указанного интервала

Там нет такого способа.

Я видел о setSoTimeOut(2000) функцию, которая закрывает сокет после временного интервала предписанных в технических заданиях

Нет, это не делает. Он вообще не закрывает сокет, и он вызывает методы чтения для сброса SocketTimeoutException, если данные не поступают в течение периода ожидания.

, но я хотел бы закрыть только если сокет находится в режиме бездействия в течение заданного интервала

Socket.setSoTimeout() это именно то, что вам нужно.

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

Другими словами, ваш сервер игнорирует конец потока на сокете. Не делай этого. Закройте сокет, если вы получите конец потока из метода чтения.

+0

Полностью новичок в этом, пожалуйста, скажите мне, как определить конец потока из метода чтения. –

+0

Рассматривали ли вы консультации с Javadoc? На данный момент вы, кажется, просто догадываетесь. – EJP