Сведения о вопросе

LiKIY

01:10, 14th August, 2020

Теги

java   exception   sockets   networking    

Настроить сокет Java на fail-fast при отключении?

Просмотров: 452   Ответов: 3

У меня есть порт прослушивания на моем сервере, к которому я подключаюсь с помощью класса Java и интерфейса Socket , i.e.

Socket mySocket = new Socket(host,port);

Затем я хватаю OutputStream, украшаю PrintWriter в режиме автозапуска, и я смеюсь - за исключением того, что порт прослушивания закрывается. Тогда я получаю

tcp4       0      0  *.9999                 *.*                    LISTEN
tcp        0      0  127.0.0.1.45737        127.0.0.1.9999         CLOSE_WAIT

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

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

Какие-нибудь советы, пожалуйста?

Спасибо всем



  Сведения об ответе

crush

23:38, 25th August, 2020

Установить короткий тайм-аут?

Разве isOutputShutdown() не дает вам то, что вы хотите?

Вы всегда можете построить класс SocketWatcher , который вращается в своем собственном Thread и неоднократно пытается записать пустые строки в Socket , пока это не вызовет SocketClosedException .


  Сведения об ответе

9090

13:52, 17th August, 2020

Единственный надежный способ обнаружить нарушенное соединение в TCP - это написать в него, что в конечном итоге вызовет 'connection reset' IOException. Однако из-за буферизации это произойдет не на первой записи после отключения,а на последующей записи. Ты ничего не можешь с этим поделать.


  Сведения об ответе

PROGA

15:22, 11th August, 2020

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться