发现WiFi直接服务- Windows <=>Android
本文关键字:Android Windows WiFi 服务 发现 | 更新日期: 2023-09-27 18:15:11
长话短说
我试图从一台Windows 10电脑上发现(Android)设备,使用WiFi直接服务-但在我看来,Windows和Android在这里的标准不一致。
当我写Wifi直接服务或Wifi直接广告时,我的意思是Wifi直接功能的设备可以广播它提供的服务,因此潜在的对等体可以在建立任何连接之前扫描可用的设备/服务。
有没有人在windows和android之间取得过成功?
我尝试过的细节
所以我一直在这方面工作,寻找文档和例子。
Android <-> Android
使用这个Android服务发现的例子,我已经成功地让两个Android设备找到对方,并在任何实际的WiFi直接连接建立之前列出他们可用的服务。
它的工作方式是一个想要找到其他设备(服务)的设备将广播探测请求。发布服务的设备将看到这些探测请求,并使用探测答案进行响应。探测应答包括Bonjour(类似)信息,通知第一个设备有关可用服务的信息。这(类似于)主动扫描。
输入Windows 10
我一直在玩微软的WiFi直接服务示例项目(和其他),但没有大的成功。Windows可以看到Android设备,但是
- 仅在Android设备处于Service Discovery模式(即发送探测请求)时
- Windows只能看到设备,不能看到它提供的服务。
基本上我的结论(有点猜测)是Windows 10使用被动扫描,因此(错误地?)对Android设备的探测请求做出反应(当Windows实际上应该自己发送探测请求并对探测响应做出反应时)。
实际问题
我很难形成一个清晰的问题,对不起,但是
- 有人成功地在Android和Windows之间进行了服务发现吗?有没有人知道Windows(10)是如何在这里工作的?能否使Windows使用活动扫描模式和解析业务通知?
- 其他提示将帮助我的方式是非常感激:-)
对于任何发现这个问题的人来说,你链接的Windows API使用Wi-Fi联盟标准Wi-Fi对等服务(P2Ps)用于探测请求和响应中的服务发现。当在探测请求帧中包含匹配的散列时,通过探测响应帧发布和发现服务。服务也可以通过类型为p2p的ANQP/GAS帧被发现。
Android API使用Wi-Fi联盟Wi-Fi对等网络(P2P)标准中定义的服务发现。这是一种早于p2p的服务发现形式。它使用ANQP/GAS帧,类型为Bonjour或UPnP。两种方法都是有效且基于标准的,但它们彼此不兼容。最接近兼容性的方法是使用Wi-Fi Direct而不进行服务发现(在发现时基本上只能看到设备名称,而不是"服务")。
Windows示例:https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/WiFiDirect
Android示例:https://developer.android.com/training/connect-devices-wirelessly/wifi-direct.html我使用运行在Windows端的Apple Bonjour服务器(Bonjour == Apple的零配置网络实现)完成了此操作。
问题是我必须使用Mono。Zeroconf库来完成http://www.mono-project.com/archived/monozeroconf/,这有点偏离常规,因为在Windows端最流行的库仅限客户端,不允许注册为服务提供商。此外,作为一个额外的惊喜,在这个项目的源代码没有被重新编译最近当我发现它。它的工作虽然-我只需要重新编译它,使它与。net 46工作。
无论如何,操作点是Android的网络服务发现与ZeroConf互操作,因为它们都是基于DNS-SD的,我对发现大多数Android设备不做多播后的结果非常满意