Android多播套接字停止监听

3
我有一个在Android上的服务,它通过多播监听和响应接收到的数据包。通常情况下这个服务完美运行,但不幸的是,有时会突然停止接收数据包。线程仍然阻塞在MulticastSocket.receive()的调用上,但没有任何内容传出。我一直在慢慢地寻找是什么触发了这个问题,我发现关闭并重新打开无线或更改无线连接可以解决这个问题。
为了成功地继续监听我的数据包,我需要关闭MulticastSocket并重新创建它。然而,我没有找到任何方法来做到这一点---我似乎没有得到任何通知,表明发生了什么事: 没有意图,没有Java异常,什么都没有。如果套接字无效,我希望接收操作抛出IOException,但这似乎并没有发生。
有人能够提供任何关于(a)实际发生了什么以及(b)如何解决此问题的见解吗?现在,我最好的猜测是每隔十秒钟不断地销毁并重新创建套接字,而这只是一种邪恶的方法。
2个回答

3

4
是的,这样做可以解决问题。然而,当连接断开时,你的多播锁会被销毁(在我找到问题所在之前,我重写了代码三次才弄清楚这一点)。因此,每次重新连接时都需要重新获取锁定。 - David Given
请注意,链接由于拼写错误而损坏 /androi/net 应更正为 /android/net,完整链接如下:http://developer.android.com/reference/android/net/ConnectivityManager.html#CONNECTIVITY_ACTION - Wayne Phipps

2

您正在获取多播锁吗?

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

似乎某些设备会阻止多播:

Android 2.2上的多播


是的,我正在获取锁,并且我已经验证了我的设备确实实现了多播。 - David Given

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接