Настроить Java-сокет на быстрый сбой при отключении?

StackOverflow https://stackoverflow.com/questions/22720

Вопрос

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

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() метод в сокете, но, похоже, он не знает, что соединение закрыто.

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

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

Спасибо всем

Это было полезно?

Решение

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

Делает isOutputShutdown() не могу дать тебе то, что ты хочешь?

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top