Как правильно закрыть активность при активном сокетном соединении? - PullRequest
0 голосов
/ 04 февраля 2012

У меня есть приложение для Android с всегда активными соединениями сокетов.Если соединение потеряно, приложение автоматически подключается к серверу.Сокет работает в отдельном потоке.

Я могу правильно закрыть сокет в различных ситуациях.Например, при нажатии кнопки выключения экрана или возврата назад.

Я попытался переопределить onPause, onResume, onDestroy с помощью этого:

Я могу правильно закрыть сокет в различных ситуациях.Например, когда экран выключен или нажата кнопка назад.

Я пытался переопределить onPause, onResume, onDestroy.Я попробовал все три из этих подходов,

Явное закрытие сокета:

socket.close();

Просто обнуление:

socket = null;

И я также попробовал shutdownInputметод:

socket.shutdownInput();

но сервер продолжает думать, что сокет жив.

PS: кстати, когда я перекомпилирую и снова запускаю приложение для Android, соединение разорвано хорошо.

Ответы [ 2 ]

0 голосов
/ 15 июля 2012

Вы должны заставить сервер закрывать сокет тоже.Если вы этого не сделаете, сервер будет верить, что клиентский сервер все еще открыт до тех пор, пока сервер не попытается выполнить попытку записи / чтения.

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

1 - сервер создает сокет прослушивания

2 - сервер accept()

3 - Следующее:

while( readClientCommand() !=CLOSE_COMMAND)

   // process command

4 - socket.close();

0 голосов
/ 09 февраля 2012

То, что вы описываете, похоже, распространенная проблема при работе с сокетами; а именно, даже если вы правильно закрыли сокет на стороне клиента (т.е. в вашем приложении для Android), ваш сервер не знает об этом, и это , вероятно, , почему он все еще думает, что розетка жива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...