在 Android WiFi Direct 服务发现中发送数据而不是连接

Posted

技术标签:

【中文标题】在 Android WiFi Direct 服务发现中发送数据而不是连接【英文标题】:Sending data in Android WiFi Direct service discovery instead of connecting 【发布时间】:2014-10-14 17:54:50 【问题描述】:

按照此处的文档:

http://developer.android.com/training/connect-devices-wirelessly/nsd-wifi-direct.html

只需将数据放在 WifiP2pDnsSdServiceInfo 对象中,就可以将数据广播到附近所有具有 WiFi Direct 的设备,而无需建立连接。这适用于我的目的,因为我试图在附近的多个设备之间建立一个简单的 P2P 消息传递应用程序。然而,这似乎是对 API 的滥用,因为它旨在携带信息以建立连接并宣传服务。我的问题是:

以这种方式发送数据的优缺点是什么(请忽略安全性)? 发送/接收消息是否会有延迟。 对电池寿命有何影响?

【问题讨论】:

【参考方案1】:

您传递给WifiP2pDnsSdServiceInfo 对象的键/值对将被封装到DNS 多播消息中,如DNS-Based Service Discovery 中所指定。

WiFi 上的多播流量特别昂贵,因此不建议将其用于消息传递。仅用于服务发现等关键事务。

根据实现 (android),底层框架可能会在调用您的回调之前汇集所有服务发现记录/响应。这会给您的简单 P2P 消息传递增加显着(甚至是不可预测的)延迟。

这基本上是一个 DNS 消息,因此您的“消息”可能会在本地缓存。 DNS 查询还可以尝试中级优化,例如池化、重试、查询过滤、优先级等。

没有可靠性保证,因此您的消息可能会丢失。

此处使用的多播流量可能会导致大量battery drain on android, see here

【讨论】:

您能否评论设置和维护与另一台设备的连接的性能(速度方面)和电池使用情况? @ajnatural 和WifiP2pDnsSdServiceInfo 没有连接设置,它是零配置,多播广播谈话/收听。正如我在回答中提到的那样,性能将不可靠,并且由于必须进行广播,因此击球手会大量流失。如果是指普通 WiFi P2P 连接,一旦您发现并建立连接,WiFi P2P 将与普通 wifi 连接一样快速/省电。

以上是关于在 Android WiFi Direct 服务发现中发送数据而不是连接的主要内容,如果未能解决你的问题,请参考以下文章

我可以通过 WIFI-Direct 在 Android 和 IOS 之间连接吗?

WiFi-Direct 在游戏开发中的使用 (Android)

在 Android 和 Raspberry Pi 3 Linux 之间建立 Wifi-Direct 连接

通过 Wifi Direct (p2p) 服务将 Raspberry 与 Android 连接

在Android和Raspberry Pi 3 Linux之间建立Wifi-Direct连接

在android上使用wifi直接发现服务后该怎么办?