Настройка Java сокета к сбою-быстро на разъединение?

голоса
3

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

Socket mySocket = new Socket(host,port);

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

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

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

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

Любые советы, пожалуйста?

Спасибо всем

Задан 22/08/2008 в 16:58
источник пользователем
На других языках...                            


3 ответов

голоса
0

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

Ответил 22/02/2014 в 23:47
источник пользователем

голоса
0

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

Разве isOutputShutdown()не получить , что вы хотите?

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

Ответил 22/08/2008 в 17:33
источник пользователем

голоса
-2

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

Ответил 29/09/2008 в 02:12
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more