我在Android上有一项服务,可以侦听并响应通过多播接收的数据包。
这大部分时间都有效,但不幸的是,我发现它一次又一次地停止接收数据包。线程在对MulticastSocket.receive()的调用中仍然被阻塞,但没有任何结果。我一直在慢慢地试图找出触发这种情况的原因,并且我发现无线关闭再打开,或者改变无线连接也会这样做。
为了成功继续侦听我的数据包,我需要关闭MulticastSocket并重新创建它。但是,我还没有找到任何方法这样做 - 我似乎没有得到任何事情的通知:没有意图,没有Java异常,没有。如果套接字变为无效,我希望接收抛出IOException,但这似乎没有发生。
任何人都可以提供任何见解(a)实际发生了什么,以及(b)如何解决它?现在我最好的猜测是每隔十秒左右不断地破坏并重新创建套接字,这就是邪恶的。
答案 0 :(得分:3)
注意:这个答案在2010年提出问题时很有意义,今天可能无关紧要。
我认为改变无线网络非常类似于禁用和重新启用网络(可能使用不同的IP和路由),因此不会出现意外情况。
也许注册网络信息的变化会给你所需的警告?
http://developer.android.com/reference/android/net/ConnectivityManager.html#CONNECTIVITY_ACTION
及相关网页
答案 1 :(得分:2)
您是否正在获取多播锁?
WifiManager manager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
MulticastLock lock = manager.createMulticastLock("lock name");
lock.setReferenceCounted(true);
lock.acquire();
似乎某些设备会阻止多播: