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

6

长话短说

我正在尝试使用WiFi Direct服务从Windows 10计算机发现(Android)设备,但似乎Windows和Android在这方面的标准上不一致。

当我提到Wifi Direct Services或Wifi Direct Advertisement时,我的意思是具有WiFi Direct功能的设备可以广播其提供的服务,因此潜在对等体可以在建立任何连接之前扫描可用的设备/服务。

是否有人成功地跨越Windows-Android差距做过这个?

我所尝试的详细信息

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

Android <-> Android

使用这个Android 的Service Discovery示例,我已经成功让两个Android设备在实际进行WiFi Direct连接之前找到彼此并列出它们的可用服务。

它的工作原理是:要查找其他设备(服务)的设备将广播探针请求。发布服务的设备将看到这些探针请求,并回复一个探针响应。探针响应包括类似Bonjour的信息,通知第一个设备可用的服务。这类似于主动扫描。

Windows 10的介入

我已经使用Microsoft的WiFi Direct Services示例项目(和其他项目)进行了一些尝试,但没有大的成功。 Windows能够看到Android设备,但是:

  • 只有当Android设备处于服务发现模式(即发送探针请求)时
  • Windows只能看到设备,而无法看到它提供的哪些服务。

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

所以,实际问题是什么?

我有些难以形成一个明确的问题,抱歉,但是:

  • 有人成功地在Android和Windows之间进行过服务发现吗?
  • 是否有任何关于Windows(10)如何工作的见解?我可以让Windows使用主动扫描模式并且解析服务公告吗?
  • 其他有助于我前进的提示将不胜感激 :-)

更多背景信息链接: - Jørn Christensen
2个回答

0

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

问题在于,我不得不使用Mono.Zeroconf库来完成它http://www.mono-project.com/archived/monozeroconf/,因为在Windows端最流行的库仅限于客户端,并且不允许注册为服务提供者。此外,作为额外的惊喜,当我发现这个项目时,其中的源代码已经很久没有重新编译了。不过它还是能够工作的--我只需要重新编译它以使其与.Net46兼容即可。

无论如何,关键点是Android的网络服务发现与ZeroConf是互操作的,因为它们都基于DNS-SD,而在发现大多数Android设备不支持多播后,我对结果感到非常满意。


我有点离开了这个项目,但还是想发表评论。我确实关注过Zeroconf——我一直在我的家庭Linux设备上使用它——但据我所知,Zeroconf只能在IP层上工作。也就是说,设备需要连接到相同的(Wifi)网络才能广播/发现服务。我希望服务发现能够在Wifi层上工作,即在实际建立Wifi(直连)连接之前就能够发现服务。如果您有一个链接描述了Zeroconf对此的支持,那么我认为这可能是一个答案。 - Jørn Christensen
唉,ZeroConf和NSD都依赖于DNS,因此它们完全基于IP。话虽如此,这是我找到的唯一一种方法,可以从Android设备上找到运行在Windows设备上的服务。我曾经花了很多时间努力寻找。 - JoeHz

0

为了给任何发现这个问题的人提供一些背景,你链接的Windows API使用了Wi-Fi联盟标准中的Wi-Fi对等服务(P2Ps)来进行探测请求和响应中的服务发现。当探测请求帧中包含匹配的哈希时,服务会在探测响应帧中被广告和发现。这些服务也可以在类型为P2Ps的ANQP/GAS帧中被发现。

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

这两种方法都是有效的和基于标准的,但它们彼此之间不兼容。你(可能)能够实现最接近兼容性的方式是使用Wi-Fi Direct而没有服务发现(你只能在发现时看到设备名称,而不是“服务”)。

Windows示例:https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/WiFiDirect

安卓示例:https://developer.android.com/training/connect-devices-wirelessly/wifi-direct.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接