Android Multicast сокет перестает слушать

У меня есть сервис на Android, который слушает и отвечает на пакеты, которые он получает через многоадресную рассылку.

Это работает большую часть времени, но, к сожалению, я обнаруживаю, что время от времени он просто прекращает получать пакеты. Поток остается заблокированным при вызове MulticastSocket.receive(), но ничего не выходит. Я медленно пытался отследить, что это вызывает, и обнаружил, что выключение и повторное включение беспроводного соединения или изменение беспроводного соединения сделает это.

Чтобы успешно продолжить прослушивание моих пакетов, мне нужно закрыть MulticastSocket и заново создать его. Однако я не нашел никакого способа сделать это - я не получаю никаких уведомлений о том, что что-то произошло: никаких намерений, никаких исключений Java, ничего. Я ожидаю, что при получении будет выдано исключение IOException, если сокет станет недействительным, но, похоже, этого не происходит.

Может ли кто-нибудь предложить какое-либо понимание относительно (а) того, что на самом деле происходит, и (б) как обойти это? Прямо сейчас мое лучшее предположение - постоянно разрушать и воссоздавать сокет каждые десять секунд или около того, и это просто зло.

2 ответа

Решение

Примечание. Этот ответ имел смысл, когда вопрос задавался в 2010 году, вероятно, он не имеет значения сегодня.

Я думаю, что смена беспроводных сетей во многом схожа с отключением и повторным включением сети (вероятно, с другим IP-адресом и маршрутизацией), поэтому неудивительно, что все обрывается.

Возможно, регистрация изменений в информации о сети даст вам необходимое предупреждение?

http://developer.android.com/reference/android/net/ConnectivityManager.html

и связанные страницы

Вы приобретаете многоадресную блокировку?

WifiManager manager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
MulticastLock lock = manager.createMulticastLock("lock name");
lock.setReferenceCounted(true);
lock.acquire();

Также кажется, что некоторые устройства блокируют многоадресную рассылку:

Многоадресная рассылка на Android 2.2

Другие вопросы по тегам