2015-06-20 39 views
0

我正尝试使用Bonjour功能来检测我的应用程序的其他实例并使用WiFi p2p通信。我的应用程序包括一个服务器和客户端部分。 (无头)服务器不断公布其服务并且客户端寻找服务器。当客户端看到服务器的Bonjour通告时,它宣布了它的本地服务,并且连接由服务器启动 - 所有这些都使PBC对话框在客户端设备上发生。并发Android - bonjour发现可能吗?

所有这似乎工作正常,除了服务发现终止时客户端看到服务器。由于客户端本地服务的广告将由服务器的存在(加上用户交互)触发,所以服务器需要拾取客户端服务通知。

它不起作用。 bonjour协议有没有限制?只能有一部分广告本地服务吗?或者这是一个在android实现的限制?

回答

0

理论上它应该工作得很好。所以我假设你的服务器一直在做这个服务的广告,同时它也在做服务发现。

如果是这样,那么你可能想检查我的Blog文章。基本上在我的测试中,我发现Discovery在重复的时间段内没有找到任何东西,因此当您进行测试时,切记要随时关闭/打开WiFi,或者重新启动设备以重新启动。

第二个问题可能是,在我的观察中,我发现服务的设备公告只有在API处于活动状态时才可见,即,请尝试继续对等发现过程,并查看它是否会使您的客户端发现。

另一个很好的问题可能是您的实例名称太长,或者它可能是我还没有发现的另一个功能。

顺便说一句,如果您的安全模型允许您进行自动WiFi接入点连接,并且客户可以在与服务器通话时切断其“正常”WiFi。然后,您可以考虑使用API​​的CreateGroup方法创建一个访问点,您的客户端可以自动连接,而无需接受任何UI。

+0

我的服务器在应用程序启动时(它是服务)侦听“WIFI_P2P_CONNECTION_CHANGED_ACTION”和“WIFI_P2P_STATE_CHANGED_ACTION”。当收到和状态都是'WIFI_P2P_STATE_ENABLED'且没有连接时,应用程序调用'setDnsSdResponseListeners()'和'addLocalService()'。服务类型是'_thingserver._tcp',而痉挛的名称是'_thingserver'。 txtRecord包含两行...之后,应用程序调用'addServiceRequest()'和'discoverServices()'。 – user331244

+0

这一切似乎都很好,如果我在客户端宣布它的服务后重新启动应用程序,服务器就会回调'onDnsSdTxtRecordAvailable()'。 我认为发现时间约为60秒,重新启动应用程序的用例要短得多。非常令人沮丧... 是的,与组形成的遗留API可能是一种替代方案,但bonjour发现真的是我正在寻找的。 – user331244

+0

添加一些链接到一些代码。服务器[link](https://github.com/jonasandero/wifithing/blob/master/src/com/example/wifithing/server/ServerService.java)和客户端[link](https://github.com) /jonasandero/wifithing/blob/master/src/com/example/wifithing/client/ClientService.java) – user331244