J'ai un service sur Android qui écoute et répond aux paquets qu'il reçoit via la multidiffusion.La prise Android Multicast arrête d'écouter
Cela fonctionne la plupart du temps, mais malheureusement, je constate que de temps en temps il va juste arrêter de recevoir des paquets. Le thread reste bloqué sur l'appel à MulticastSocket.receive(), mais rien ne sort. J'ai lentement essayé de trouver ce qui déclenche cela, et j'ai découvert que le fait de l'éteindre et de le rallumer, ou de changer de connexion sans fil le fera.
Pour continuer à écouter mes paquets, j'ai besoin de fermer MulticastSocket et de le recréer. Cependant, je n'ai trouvé aucun moyen de le faire --- Je ne semble pas recevoir de notification que quelque chose est arrivé: pas d'intentions, pas d'exceptions Java, rien. Je m'attendrais à ce que la réception lance une IOException si la socket est invalide, mais cela ne semble pas se produire.
Quelqu'un peut-il donner un aperçu de ce qui se passe réellement et b) comment contourner ce problème? En ce moment, ma meilleure estimation est de détruire et de recréer continuellement le socket toutes les dix secondes, et c'est juste mauvais.
Oui, ça l'a fait. Cependant, il s'avère que votre verrou de multidiffusion est détruit quand la connectivité disparaît (le long délai était moi réécrire mon code trois fois avant que je comprenne ceci dehors). Donc, vous devez réacquérir le verrou à chaque fois que la connexion revient. –