wifi p2p owner的确定

本文详细介绍了P2P Wi-Fi Direct技术的基本概念及其组网原理,包括P2PDevice、P2PGroupOwner (GO) 和 P2PGroupClient (GC) 的角色定义。此外还探讨了常见问题,如GO与GC身份确定的方法、连接建立及断开流程,并给出了维持设备始终处于可发现状态的策略。
原文引自: http://www.bubuko.com/infodetail-958689.html

P2P架构中定义了三个组件,一个设备,两种角色。这三个组件分别是:

P2P Device:它是P2P架构中角色的实体,读者可把它当做一个Wi-Fi设备。
P2P Group Owner(GO):P2P网络建立时会产生一个Group。
P2P Group Client(GC):

在组建P2P Group(即P2P Network)之前,智能终端都是一个一个的P2P Device。
当这些P2P Device设备之间完成P2P协商后,那么其中将有一个并且只能有一个Device来扮演GO的角色,而其他Device来扮演GC的角色。

最终构成的这个P2P Group组织结构如图所示:

技术分享

P2P Group示意图

如图展示了一个典型P2P Group的构成,其中:

一个P2P Group中只能有一个GO。一个GO可以支持1个或多个(即图中的1:n)GC连接。

由于GO的功能类似于AP,所以周围那些不支持P2P功能的WIFI STA也能发现并关联到GO。这些WIFI STA被称之为Legacy Clients。

注意:“不支持P2P功能”更准确的定义是指不能处理P2P协议。在P2P网络中,GO等同于AP,所以Legacy Clients也能搜索到GO并关联上它。不过,由于Legacy Clients不能处理P2P协议,所以P2P一些特有功能在这些Legacy Clients中无法实现。




Wifi_Direct的大致配对流程如下:
a. WifiP2pManager.discoverPeers()开始扫描设备
b. 获取扫描到的设备,选择其中一个设备进行连接配对WifiP2pManager.connect
c. 配对成功后,根据WifiP2pInfo.isGroupOwner和WifiP2pInfo.groupOwnerAddress进行连接。

流程图如下:
技术分享




常见的问题
问题1:WifiP2pManger.connect()时,如何确定谁是GO,谁是GC

答:调用WifiP2pManger.connect()进行连接时,GO还算GC的身份是随机的。开发者无法决定GroupOwner是哪台设备,但是可以通过WifiP2pConfig.groupOwnerIntent参数进行建议。


问题2:如果一定要确定谁是GO,谁是GC,怎么办

答:第一步:GO端先调用WifiP2pManger.createGroup

第二步:GO端或者GC端调用WifiP2pManger.connect

即:先建立Group,再连接


问题3:如何断开连接

答:WifiP2pManger.removeGroup

注意:WifiP2pManger.removeGroup是移除Group,断开连接。WifiP2pManger.cancelConnect()断开一个connecting的连接,即断开当前状态是Invited的连接。


问题4: 我们已知配对成功的前提条件是:进行配对的两台设备都必须能够扫描到对方。那么如何保证本机一直处于搜索状态呢?

答:经过测试得知,一般情况下,本机Scan一次,能够保持在线状态3分钟,即能够搜索到其他设备/被其他设备搜索到的时间一般是3分钟。但是这个3分钟不是非常准确的,这跟手机性能或者WIFI芯片都有很大关系。因此我们能做的方案就是如果搜索结束,就重启一次搜索。

对于一般的Peer Discovery而言,如果搜索结束,会收到广播WifiP2pManager.WIFI_P2P_DISCOVERY_CHANGED_ACTION,这样再收到广播后重新搜索就可以。

对于Service Discovery而言(这其实是使用最广泛的),搜索结束后,系统不会发出广播通知,这样就给开发者带来一个难题:你无法知晓当前是否处于搜索(可见)状态。

目前比较可行的做法是:每隔3分钟(或者更短)重启一次搜索,这样基本保证本机一直处于搜索状态。但是这仅能覆盖大多数的情况,建议再此基础上再加入手动搜索(搜不到可以让用户手动搜索)保证当前的可见状态。

目前wifip2p依然不是很稳定,从测试的结果来说,Wifi_Direct的表现受具体设备的影响很大,配对的速度也有较大差异,从10秒到2分钟甚至更久。有可能出现

a.A机器处于搜索(可见)状态,但是B机器依然搜索不到;

b.还有可能出现A机器处于搜索(可见)状态,B机器也搜索到了,但是连接失败(此情况的主要原因还是因为A机器搜索结束后系统不发通知,而B机器当前搜索到的A机器是之前A机器的状态)
<think>嗯,用户问的是WiFi P2P的连接方式,也就是Wi-Fi Direct吧。首先我得回忆一下Wi-Fi P2P的基本概念,它允许设备在没有传统路由器的情况下直接连接,这点蓝牙有点像,但传输速度更快,距离更远。不过具体怎么连接的步骤可能需要详细说明。 首先,我需要确定用户可能的使用场景。可能用户是想了解如何让两个设备直接连接,比如手机打印机,或者手机电视传输文件。他们可能遇到了传统Wi-Fi需要路由器的限制,想用直连方式解决问题。所以需要把步骤讲清楚,确保他们能操作。 接下来,Wi-Fi P2P的连接流程大致分为发现、协商、连接这几个阶段。但具体每一步怎么操作呢?比如设备发现对方的过程,可能涉及搜索响应。然后协商组所有者(Group Owner),这有点像创建一个临时热点,一个设备充当GO,另一个作为客户端。协商过程可能使用标准的协议,比如GO Negotiation Request、Response、Confirmation这三个步骤,这里可能需要解释一下。 还要提到WPS(Wi-Fi Protected Setup),因为有些设备可能需要按按钮或者输入PIN码来连接。这部分用户可能比较熟悉,但需要区分不同的认证方式,比如PBCPIN。 另外,安全性方面,Wi-Fi P2P使用WPA2加密,这点需要强调,让用户知道连接是安全的。同时,要说明连接后的IP分配,通常是GO分配IP地址给客户端,这样设备之间就可以通信了。 可能用户还想知道应用场景,比如文件传输、屏幕镜像、打印等,举几个例子会更好。还有注意事项,比如兼容性,不同厂商的设备可能支持情况不同,或者耗电问题,这需要提醒用户。 需要检查有没有遗漏的关键点,比如独立热点的区别,或者蓝牙对比的优势。另外,确保技术术语用中文准确表达,比如组所有者、客户端等。还有步骤是否清晰,是否需要分点说明,让用户一步步理解。 最后,确保按照系统级指令的要求,行内公式用$...$,不过这里可能用不上数学公式,但要注意中英文标点术语的正确使用。结构要清晰,分步骤、应用场景、注意事项几个部分,帮助用户全面了解。</think>WiFi P2P(Wi-Fi Direct)是一种无需传统路由器即可实现设备间直接通信的技术。以下是其连接方式的详细说明: --- ### **一、连接核心机制** 1. **发现阶段** - 设备通过发送**探测帧**(Probe Request)主动搜索周边设备,响应方返回**探测响应帧**(Probe Response)。 - 支持两种模式: - **Listen State**:被动监听其他设备的探测请求。 - **Search State**:主动扫描周围设备。 2. **组协商(Group Negotiation)** - 设备通过**GO Negotiation Request/Response/Confirm**三次握手确定**组所有者(Group Owner, GO)**,GO功能类似于临时热点。 - 协商依据**Intent值**(0-15),数值高的设备优先成为GO。 3. **安全认证** - 支持两种模式: - **WPS-PBC**(按键配对):需物理触发设备上的配对按钮。 - **WPS-PIN**:通过输入随机生成的8位PIN码完成认证。 - 默认使用**WPA2-PSK**加密保障通信安全。 --- ### **二、连接操作流程** 1. **初始化发现** ```java // Android示例代码(需WifiP2pManager权限) WifiP2pManager manager = (WifiP2pManager) getSystemService(WIFI_P2P_SERVICE); manager.discoverPeers(channel, new WifiP2pManager.ActionListener() { @Override public void onSuccess() { /* 发现设备成功 */ } @Override public void onFailure(int reasonCode) { /* 处理错误 */ } }); ``` 2. **发起连接请求** - 选择目标设备后发送连接请求,系统自动完成GO协商。 3. **IP地址分配** - GO通过**DHCP**为客户端分配IP(如`192.168.49.x`),建立TCP/IP通信链路。 --- ### **三、典型应用场景** 1. **高速文件传输** - 传输速率可达250 Mbps(802.11n)或更高,适合大文件共享。 2. **屏幕镜像** - 如手机投屏至电视(Miracast协议基于Wi-Fi P2P)。 3. **物联网控制** - 智能家居设备直连控制(如打印机、摄像头)。 --- ### **四、注意事项** 1. **兼容性问题** - 不同厂商设备可能存在协议实现差异(如华为与三星设备直连异常)。 2. **能耗优化** - 持续搜索会显著增加功耗,建议设置超时限制。 3. **信道冲突** - 若环境中有多个P2P组,建议手动指定信道(如信道6/11)。 --- ### **五、与蓝牙对比** | 特性 | Wi-Fi P2P | 蓝牙 | |--------------------|-------------------------------|----------------| | 最大速率 | 250 Mbps+ (802.11ac) | 3 Mbps (BLE 5) | | 有效距离 | 200米(无遮挡) | 10-100米 | | 典型延迟 | 10-50ms | 100-300ms | | 多设备支持 | 支持1个GO + 多个客户端 | 7-8设备从属 | 通过上述机制,WiFi P2P实现了灵活、高效的设备直连方案,适用于需要高带宽或低延迟的场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值