【问题标题】:Concurrent Android - bonjour discovery possible?并发 Android - 卓悦发现可能吗?
【发布时间】:2015-06-20 15:53:22
【问题描述】:

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

除了当客户端看到服务器时服务发现终止之外,所有这些似乎都可以正常工作。由于客户端本地服务的广告是由服务器的存在(加上用户交互)触发的,因此服务器需要拾取客户端的服务公告。

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

【问题讨论】:

    标签: android bonjour wifi-direct service-discovery


    【解决方案1】:

    理论上它应该可以正常工作。所以我假设你的服务器一直在做服务的广告,同时它也在做服务发现。

    如果是,那么您可能想查看我的Blog 文章。基本上在我的测试中,我发现 Discovery 在重复的时间段内没有发现任何东西,因此当您进行测试时,请记住不时手动关闭/打开 WiFi,或重新启动设备以重新开始。

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

    另一个不错的问题可能是您的服务实例名称太长,或者它可能是我尚未通过 API 发现的另一个功能。

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

    【讨论】:

    • 我的服务器在应用程序启动时侦听WIFI_P2P_CONNECTION_CHANGED_ACTIONWIFI_P2P_STATE_CHANGED_ACTION(它是一项服务)。当接收和状态都是WIFI_P2P_STATE_ENABLED 并且不存在连接时,应用程序调用setDnsSdResponseListeners()addLocalService()。服务类型为_thingserver._tcp,不健全名称为_thingserver。 txtRecord 包含两行...之后应用调用addServiceRequest()discoverServices()
    • 一切似乎都很好,如果我在客户端宣布其服务后重新启动应用程序,服务器会收到对onDnsSdTxtRecordAvailable() 的回调。我认为发现时间约为 60 秒,而我重新启动应用程序时的用例要短得多。非常令人沮丧...是的,具有组形成的旧 API 可能是一种替代方案,但 bonjour 发现确实是我正在寻找的。​​span>
    • 添加一些链接到一些代码。服务器link和客户端link
    猜你喜欢
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多