Сокеты Java - обнаружение разрыва сети без входного потока - PullRequest
2 голосов
/ 05 января 2012

Недавно я писал код Java для отправки уведомлений на сервер Apple Push Notification.Проблема, с которой я сталкиваюсь, заключается в том, что я создаю сокет и затем отключаюсь от сети.Я перебирал статьи онлайн, и большинство из них предлагает опираться на методы:

socket.setKeepAlive(false);
socket.setSoTimeout(1000);

В частности, метод "setSoTimeout".Но Javadoc утверждает, что setSoTimeout будет генерировать исключение только при чтении из InputStream.Но сервер Apple Push Notification никогда не помещает какие-либо данные в InputStream, поэтому я никогда ничего не могу с него прочитать.У кого-нибудь есть предложения, как определить разрыв сети без использования сокета InputStream?

Ответы [ 2 ]

0 голосов
/ 10 января 2012

Быстрая точность: APNS будет возвращать данные в ваш InputStream, если вы используете расширенный формат уведомлений и возникает какая-то ошибка. Поэтому вам следует убедиться, что вы не игнорируете свой InputStream ...

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

0 голосов
/ 05 января 2012

Вы можете надежно обнаружить, что Socket был отключен, когда вы пытаетесь записать или прочитать из Socket.Чтение лучше, потому что для обнаружения ошибки часто требуется некоторое время.

Серверу не нужно ничего писать, чтобы вы пытались его прочитать.Если у вас есть сервер, который никогда не пишет, вы либо ничего не прочитаете, либо обнаружите сбой.

...