发现 WiFi Direct 服务 - Windows <=> Android

Discover WiFi Direct Services - Windows <=> Android

长话短说

我正在尝试使用 WiFi Direct 服务从 Windows 10 台计算机发现 (Android) 台设备 - 但在我看来 Windows 和 Android不同意这里的标准。

当我写 Wifi Direct 服务或 Wifi Direct 广告时,我指的是支持 WiFi Direct 的设备可以广播它提供的服务的功能,因此潜在的对等方可以在建立任何连接之前扫描可用的设备/服务。

有没有人在 Windows-Android 差距上取得过成功?

我尝试过的详细信息

所以我一直在做这方面的工作,搜索文档和示例。

Android <-> Android

使用这个 Service Discovery example for Android,我已经成功地让两个 Android 设备在建立任何实际的 WiFi Direct 连接之前找到彼此并列出它们的可用服务。

它的工作方式是,一个想要寻找其他设备(服务)的设备会广播探测请求。发布服务的设备随后将看到这些探测请求并以探测答案进行响应。探测答案包括 Bonjour(类似)信息,通知第一个设备有关可用服务的信息。这是(类似于)主动扫描。

输入Windows10

我一直在玩 Microsoft 的 WiFi Direct Services 示例项目(和其他项目)- 但没有取得巨大成功。 Windows 能够看到 Android 台设备,但是

基本上我的结论(有点猜测)是 Windows 10 使用被动扫描,因此(错误地?)对 Android 设备的探测请求做出反应(当 Windows 实际上应该自己发出探测请求并对探测响应做出反应)。

所以,真正的问题

我无法形成一个清晰的问题,抱歉,但是

我在 Windows 端使用 Apple Bonjour 服务器 运行 完成了此操作(Bonjour == Apple 的零配置网络实现)。

问题是我不得不使用 Mono.Zeroconf 库来完成它 http://www.mono-project.com/archived/monozeroconf/,而且它有点偏离常规路径,因为 [=20] 上最流行的库=] 方仅是客户端,不允许注册为服务提供商。此外,更令人惊讶的是,当我找到该项目的源代码时,它最近并没有被重新编译。虽然它有效——我只需要重新编译它就可以让它与 .Net46 一起工作。

无论如何,操作要点是 Android 的网络服务发现与 ZeroConf 可互操作,因为它们都是基于 DNS-SD 的,在发现大多数 android 设备不进行多播

仅供发现此问题的人参考,您链接的 Windows API 使用名为 Wi-Fi 对等服务的 Wi-Fi 联盟标准(P2Ps) 用于探测请求和响应中的服务发现。当探测请求帧中包含匹配的哈希值时,将通过探测响应帧公布和发现服务。这些服务也可以通过 P2P 类型的 ANQP/GAS 个帧被发现。

AndroidAPI 使用 Wi-Fi 联盟 Wi-Fi 点对点 (P2P) 标准中定义的服务发现。这是一种早于 P2P 的服务发现形式。它使用 Bonjour 或 UPnP 类型的 ANQP/GAS 帧。

这两种方法均有效且基于标准,但彼此不兼容。您(可能)最接近兼容性的方法是使用 Wi-Fi Direct 并且没有服务发现(您基本上只能在发现时看到设备名称,而不是 "service")。

Windows 样本:https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/WiFiDirect

Android 样本:https://developer.android.com/training/connect-devices-wirelessly/wifi-direct.html