我在 Android 上有一个服务,可以监听并响应通过多播接收的数据包。
这在大多数情况下都有效,但不幸的是,我发现它时不时地会停止接收数据包。线程在调用 MulticastSocket.receive() 时保持阻塞状态,但没有任何结果。我一直在慢慢地尝试找出触发此问题的原因,并且我发现关闭然后再次打开无线或更改无线连接就可以做到这一点。
为了成功地继续侦听我的数据包,我需要关闭 MulticastSocket 并再次重新创建它。然而,我还没有找到任何方法来做到这一点 --- 我似乎没有收到任何发生了某些事情的通知:没有意图,没有 Java 异常,什么都没有。如果套接字无效,我希望接收抛出 IOException,但这似乎没有发生。
任何人都可以提供有关(a)实际发生的情况以及(b)如何解决它的任何见解吗?现在我最好的猜测是每隔十秒左右不断地销毁并重新创建套接字,这只是邪恶的。
注意:这个答案在 2010 年提出这个问题时是有意义的,但今天可能已经无关紧要了。
我认为更改无线网络非常类似于禁用和重新启用网络(可能使用不同的 IP 和路由),因此出现问题也就不足为奇了。
也许注册网络信息的更改会给您带来所需的警告?
http://developer.android.com/reference/android/net/ConnectivityManager.html#CONNECTIVITY_ACTION
和相关页面
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)