gpt4 book ai didi

java - NsdManager 不解析多个发现的服务

转载 作者:太空宇宙 更新时间:2023-11-03 11:11:06 25 4
gpt4 key购买 nike

从例子开始http://developer.android.com/training/connect-devices-wirelessly/nsd.html代码,我一直在构建一个旨在在同一子网中的多个设备上运行的应用程序。每个设备注册相同的服务并尝试使用该服务发现子网中的其他设备。如文档中所述,每次设备注册服务时,名称都会被附加的“(N)”所破坏,其中 N 是一个整数。每个设备,当它进行发现时

public void discoverServices() {
mNsdManager.discoverServices(
SERVICE_TYPE, NsdManager.PROTOCOL_DNS_SD, mDiscoveryListener);
}

查找所有已注册的服务。我在保留发现的 NsdServiceInfo 记录的 HashMap 中跟踪它们。

当我试图解决它们时,问题就来了。如果我迭代 HashMap 并解析每个 NsdServiceInfo,只有第一个成功。我认为问题可能在于需要一个单独的 NsdManager.ResolveListener,所以我为每个 NsdServiceInfo 记录创建了一个,但并不高兴。

如果我阻止 hashmap 中的第一个服务被解析,下一个服务就会工作。这是 DDMS 输出:

07-09 17:11:36.799: D/P2PServiceManager(1958): Resolving services with type : PeerDiscovery
07-09 17:11:36.799: W/P2PServiceManager(1958): Resolving PeerDiscovery services with name : PeerDiscovery (3)
07-09 17:11:36.799: W/P2PServiceManager(1958): Resolving PeerDiscovery services with name : PeerDiscovery (2)
07-09 17:11:36.807: E/P2PServiceManager(1958): RRRRRRRRRRRRRRRRRRR Resolve failed : error code 3
07-09 17:11:36.830: E/P2PServiceManager(1958): RRRRRRRRRRRRRRRRRRR Resolve Succeeded. name: PeerDiscovery\032(3)type: ._http._udphost: /192.168.1.145port: 53221txtRecord: null

我怀疑存在一些不可重入代码或其他类似问题,但想知道是否有其他人看到过这个问题。 Google 和 StackOverflow 似乎没有答案。

[2014-07-24] 最后我坚持迭代发现的服务来解析它们,但在解析下一个服务之前等待每个结果。我想这是做事的正确方法,但从 NsdManager 文档中并不清楚是哪种方式。

最佳答案

最后,我在我的应用程序中修复了相同的问题,以在我的网络中发现同一服务名称上的多个 Bonjour 设备

我做了什么:

Activity > Starts Discovery Listener > Starts ResolveListener

它们都在同一个 Activity 中声明,并通过将我找到的对象添加到设备对象列表中推回一个对象 activity.addDevice(ip, port, name, service);

现在我只是让每台设备都独立运行,而不是覆盖监听器中的结果并只获得一个或没有结果。

希望对遇到同样问题的人有所帮助。我会尽快准备一个代码示例。

关于java - NsdManager 不解析多个发现的服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24665342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com