В основном я новичок в программировании сокетов. я хотел бы узнать, как закрыть сокет, если он остается бездействующим в течение заданного интервала времени. я искал в сети об этом, я нашел эту функцию, которая используется для закрытия сокета после указанного интервала. но здесь, в моем случае, я хотел бы, чтобы закрыть сокет только тогда, когда он бездействует в течение более заданного интервалаSocket Idle timeout Exception В java
ответ
я искал по сети об этом
Почему? Javadoc существует. Поиск не требуется.
Я обнаружил, что функция, которая используется для закрытия сокета после указанного интервала
Там нет такого способа.
Я видел о
setSoTimeOut(2000)
функцию, которая закрывает сокет после временного интервала предписанных в технических заданиях
Нет, это не делает. Он вообще не закрывает сокет, и он вызывает методы чтения для сброса SocketTimeoutException
, если данные не поступают в течение периода ожидания.
, но я хотел бы закрыть только если сокет находится в режиме бездействия в течение заданного интервала
Socket.setSoTimeout()
это именно то, что вам нужно.
клиент устанавливает соединение с сервером, а позже через некоторое время он клиент закрывает сокет-соединение на его сторону после выполнения требуемой задачи и создает новое соединение в следующий раз, когда он свистит, где, как мой сервер не закрывает соединение и продолжает слушать этого клиента.
Другими словами, ваш сервер игнорирует конец потока на сокете. Не делай этого. Закройте сокет, если вы получите конец потока из метода чтения.
Полностью новичок в этом, пожалуйста, скажите мне, как определить конец потока из метода чтения. –
Рассматривали ли вы консультации с Javadoc? На данный момент вы, кажется, просто догадываетесь. – EJP
Я видел о функции setSoTimeOut (2000), которая закрывает сокет после указанного интервала времени, но я хотел бы закрыть только в том случае, если сокет остается бездействующим в течение указанного интервала. –
* он остается бездействующим в течение более указанного интервала * - какова ваша логика для этого? –
в моем случае клиент устанавливает соединение с сервером, а затем через некоторое время клиент закрывает соединение сокета на своей стороне после выполнения требуемой задачи и создает новое соединение при следующем запуске, когда мой сервер не закрывайте соединение, и он продолжает слушать этого клиента, и поэтому слишком много контактов остается открытым, что приводит к различным проблемам в моем случае. поэтому я хотел бы закрыть сокет, если он остается бездействующим для указанного интервала. –