2

我目前正在编写一个 android 应用程序,它应该使用 JmDNS 跟踪同一 wifi 网络中的其他设备。发现过程正常工作,但我不知道如何跟踪其他设备,特别是注意到它们的移除。

正如 JmDNS 设备移除检测中提到的,我似乎必须自己实现这个回调,但我不知道如何做到这一点。JmDNS Api 似乎没有提供任何自己发布服务消息的方法。

到目前为止我的想法:

  • 使用发现的套接字连接来跟踪更改
  • 不时使用 JmDNS.requestServiceInfo() 检查服务是否仍然可用
  • 取消/注册服务+侦听器,以便他们可以再次找到彼此

有谁知道解决此问题的另一种方法或可以告诉我如何触发serviceRemoved()回调?

PS:在采用这种方法之前,我尝试过 Androids-NSD API,它似乎很不稳定

4

1 回答 1

0

所以这是我在实验时发现的一些事情:

DNS 缓存设置为一小时,这意味着只要该计数器未完成,侦听器就不会删除服务。

我犯的错误是关闭wifi后取消注册我的服务。服务发送广播消息,表明它们不再可用。如果 wifi 连接已关闭,则无法发送此消息。

因此,与其在 wifi 连接后调用 JmDNS.unregisterAllServices() ,不如在它可用时调用它。这会导致在监听器中触发 onServiceRemoved() 回调

于 2017-06-18T12:19:24.263 回答