【发布时间】:2014-08-31 04:00:52
【问题描述】:
从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 记录的哈希图中跟踪它们。
当我尝试解决它们时,问题就来了。如果我迭代哈希图并解析每个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
我怀疑存在一些不可重入代码或其他类似问题,但我想知道是否有其他人看到过这个问题。 Google 和 StackOverflow 似乎没有答案。
[2014-07-24] 最后我坚持迭代发现的服务来解决它们,但在解决下一个服务之前等待每个结果。我想这是做事的正确方法,但是从 NsdManager 文档中并不清楚一种或另一种方式。
【问题讨论】:
-
这个运气好吗?好像有同样的问题
标签: java android networking service resolve