从http://developer.android.com/training/connect-devices-wirelessly/nsd.html的示例代码开始,我一直在构建一个旨在在同一子网上运行多个设备的应用程序。每个设备注册相同的服务,并尝试使用该服务在子网中发现其他设备。如文档所述,每当设备注册服务时,名称都会被附加一个"(N)",其中N是一个整数。每个设备在进行发现操作时,都会对其它设备进行发现。
发现所有已注册的服务。我在哈希表中跟踪它们,并保留已发现的
问题出现在当我尝试解析它们时。如果我迭代哈希表并解析每个
如果我阻止哈希表中的第一个服务被解析,则下一个将起作用。以下是DDMS输出:
我怀疑存在一些不可重入代码或其他类似的问题,但我想知道是否有人遇到过这个问题。谷歌和StackOverflow似乎没有答案。
[2014-07-24] 最终,我选择迭代已发现的服务以解决它们,但在解决下一个服务之前等待每个结果。我认为这是正确的做法,但从NsdManager文档上看不清楚应该如何操作。
public void discoverServices() {
mNsdManager.discoverServices(
SERVICE_TYPE, NsdManager.PROTOCOL_DNS_SD, mDiscoveryListener);
}
发现所有已注册的服务。我在哈希表中跟踪它们,并保留已发现的
NsdServiceInfo
记录。问题出现在当我尝试解析它们时。如果我迭代哈希表并解析每个
NsdServiceInfo
,只有第一个是成功的。我认为可能的问题是需要单独的NsdManager.ResolveListener
,所以我为每个NsdServiceInfo
记录创建了一个,但没有成功。如果我阻止哈希表中的第一个服务被解析,则下一个将起作用。以下是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
我怀疑存在一些不可重入代码或其他类似的问题,但我想知道是否有人遇到过这个问题。谷歌和StackOverflow似乎没有答案。
[2014-07-24] 最终,我选择迭代已发现的服务以解决它们,但在解决下一个服务之前等待每个结果。我认为这是正确的做法,但从NsdManager文档上看不清楚应该如何操作。