- 浏览: 217606 次
- 性别:
- 来自: 上海
-
文章分类
- 全部博客 (196)
- android (153)
- sqlite (1)
- java (3)
- os (4)
- tools (4)
- ResolveInfo 转 packageinf 取信息 (1)
- multimedia (2)
- fastboot (1)
- create user in samba (0)
- android qcn (0)
- windows (0)
- net (2)
- linux (1)
- git (0)
- proguard (0)
- android cpu (1)
- android gts (1)
- MySql (1)
- c/c++ (0)
- network (1)
- python (3)
- AI (1)
- Ultroedit (1)
- HarmonyOS NEXT (0)
原文引自: 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机器的状态)
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机器的状态)
发表评论
-
Android SnappyDB
2018-05-15 11:23 1001https://blog.csdn.net/qq_214305 ... -
使用UncaughtExceptionHandler保存全局异常(转)
2018-05-07 15:04 675From: https://blog.csdn.net/dre ... -
android udp
2018-04-10 19:47 632Android之Socket的基于UDP传输 接收方创建步骤: ... -
android DownloadManager
2018-04-10 12:52 627From: https://www.jianshu.com/p ... -
Snackbar 可以交互的Toast
2018-04-08 21:44 801Snackbar 是 Android design sup ... -
android 操作串口
2018-03-19 18:20 693http://blog.csdn.net/akunainian ... -
proguard对 android-support-v4.jar 的配置
2018-03-16 15:32 749-libraryjars libs/android-sup ... -
apk 多个dex
2018-03-16 10:05 1034android studio 配置应用生成多个dex ... -
ddmlib 解决android n file explorer 为空问题
2018-03-16 09:27 973百度云:http://pan.baidu.com/s/1sl4 ... -
android 代码混淆
2018-03-15 08:38 1084打开混淆开关 Android.mk ... -
menu item 显示icon
2018-03-07 09:32 716@Override public boolean onMenu ... -
ubuntu 脚本切换root用户,并执行其它脚本
2018-03-05 09:58 0#!/bin/bash expect -c" ... -
DrawerLayout 滑动侧边栏
2018-03-01 10:42 0// TODO -
jack-server 多用户编译问题
2018-02-27 10:44 14223),需要同时修改 $HOME/.jack-server/co ... -
更新eclipse 遇到两个问题 Oxygen.2 Release (4.7.2)
2018-02-26 14:28 12511. the file dx.jar was not load ... -
监听系统开关变化
2018-02-05 14:02 823// 转屏开关 /** * Content obse ... -
android 8.0 模块编译命令
2018-02-02 14:42 1187Invoke ". build/envsetup.s ... -
svn checkout 忽略某个文件夹
2018-01-26 11:14 1381android源码更新时, frameworks\compil ... -
eclipse jni
2018-01-19 16:10 501试过,可以运行 http://blog.csdn.net/sb ... -
opencv for android
2018-01-19 14:37 456http://blog.csdn.net/sbsujjbcy/ ...
相关推荐
2. **P2P Group Owner (GO)**:相当于传统Wi-Fi网络中的AP角色,负责管理组内通信,控制数据流。GO能够与支持P2P的设备以及其他不支持P2P的传统STA(Station)进行通信。 3. **P2P Client**:类似于传统Wi-Fi网络中...
3. **组形成**:一旦发现合适的设备,它们可以协商成为Group Owner(GO)或P2P Client。GO负责分配IP地址、管理组内的连接,并可能提供Internet访问(如果配置了互联网桥接)。 4. **连接建立**:P2P Clients连接到...
2. Group Formation Procedure:确定设备的角色,即谁成为Group Owner(GO),谁成为Client,并完成安全配置。 3. Operational Phase:设备开始在组内通信。 在状态机中,Search状态可以进一步细分为Search子状态和...
- 发现目标设备后,双方通过协商确定连接参数,包括频道选择、安全设置等。 - 完成协商后,根据Group Owner Selection机制决定Group Owner。 - 建立连接后,设备之间可以进行数据传输。 - **安全性**: - 使用...
支持WiFiP2P的设备需扮演**P2P Group Owner**或**P2P Client**角色以形成P2P Group: - **P2P Group Owner**:充当传统路由器的角色,管理WiFiP2P组,使设备能够通信。 - **P2P Client**:连接到P2P Group Owner以...
- **Go Negotiation:** 组织所有者协商过程确定哪个设备将成为 Group Owner。 - **Service Discovery:** 服务发现机制允许设备搜索和发现附近的 Wi-Fi P2P 设备提供的服务。 - **P2P Channel Management:** 管理 ...
- **WiFi/P2P控制器**:控制Wi-Fi P2P功能的实现。 - **D-Bus API**:提供了一个进程间通信的框架。 - **nl80211**:Netlink接口,用于用户空间应用程序与内核之间交互。 ##### 驱动程序实现 - **mac80211**:必须...
- **P2P Group Owner (GO)**:在Wi-Fi Direct连接中,有一个设备作为群组所有者,它负责管理连接并分配IP地址。 - **P2P Client**:其他设备作为客户端,连接到GO以建立通信。 - **服务发现**:设备可以通过Wi-Fi...
- 设备可以在群组中扮演两种角色:Group Owner(组主)和Client(客户端)。组主相当于小型热点,负责分配IP地址和管理连接,而客户端则连接到组主进行通信。 - Wi-Fi Direct支持高速传输,速度可达250Mbps,且...