Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Работа с сетью > Отловить обрыв соединения с помощью Java


Автор: samolisov 13.1.2010, 09:47
Здравствуйте, коллеги.

Пишу библиотеку, реализующую ICQ-протокол. Возникла проблема отслеживания обрыва соединения с сервером. Понятно, что во-первых в диалоге может быть пауза, во-вторых, соединение может быть просто разорвано и нужно отличать эти две ситуации. Для этого советуют использовать схему "пинг-понг", но сервер ICQ такую схему не реализует. В то же время, например PSI (jabber-клиент) умеет сразу же обнаруживать разрыв соединения.

Вопрос такой: как с помощью Java (Socket API или что-то другое) отследить момент разрыва соединения? Если, например, писать в сокет после разрыва соединения, то никаких IOException не генерируется. В то же время делать ping с помощью ICMP-пакетов в Java вроде бы нельзя (если не использовать напрямую команду ОС ping, но это нежелательно).

Буду благодарен за любую помощь.

Автор: COVD 14.1.2010, 17:44
Цитата

Если, например, писать в сокет после разрыва соединения, то никаких IOException не генерируется

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

Автор: LSD 14.1.2010, 18:40
Цитата(samolisov @  13.1.2010,  09:47 Найти цитируемый пост)
Если, например, писать в сокет после разрыва соединения, то никаких IOException не генерируется.

Должно. А flush() вызываете? И ОС какая?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)