http://www.simutt.com

P2P和AP模式

神眼项目在开发过程中,涉及到了P2P和AP模式的转换,目的是方便用户手机在连上神眼WiFi时,仍可以正常的使用自身移动流量上网,本来就来介绍下这两个模式以及如何在iOS和Android平台上的实现。
1、定义解释:
1)AP(无线接入点模式):AP (Wireless Access Point的简称)模式是指WIFI设备作为无线组网的一个中心节点,其他设备可以作为客户端接入该节点
AP作用是:神眼自身发出无线网络架构一个小型网络体系,手机、笔记本可以通过无线链接到此网络(俗称:WIFI热点)

2)P2P(无线点对点网桥模式):P2P(Peer to Peer)模式只是WIFI设备之间对等的组网,不需要AP参与。
P2P模式可以叫对等网络,对等网络又称工作组,神眼和手机有相同的功能,无主从之分,神眼和手机都是既可作为服务器,设定共享资源供网络中其他设备所使用。
对等计算(Peer to Peer,简称p2p)可以简单的定义成通过直接交换来共享资源和服务,而对等计算模型应用层形成的网络通常称为对等网络。
在P2P网络环境中,成千上万台彼此连接的计算机都处于对等的地位,整个网络一般来说不依赖专用的集中服务器。
网络中的每一台计算机既能充当网络服务的请求者,又对其它计算机的请求作出响应,提供资源和服务。

2、对于Android——用的是P2P模式:
由于安卓Linux内核会在设备连接wifi后,关闭3G网络——目的:省电,即AP模式下,安卓设备不能用自己的3G(移动数据)上网
验证方法:
ConnectivityManager connManager = (ConnectivityManager) this
.getSystemService(CONNECTIVITY_SERVICE);
State state = connManager.getNetworkInfo(
ConnectivityManager.TYPE_MOBILE).getState();
if (State.CONNECTED == state)
{
Toast.makeText(this, "GPRS网络已连接", Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(this, "GPRS网络没有连接", Toast.LENGTH_SHORT).show();
}
目前解决方案:
1、安卓设备连接上神眼wifi后,会给神眼发送一个消息,告诉神眼“我是安卓设备,请你切到P2P模式”
2、然后神眼关闭AP模式,切换到P2P模式
3、在此期间,安卓设备会一直扫描网络,直到扫描到并切换成P2P模式
4、在P2P模式下,神眼被安卓设备认为是一个可以通信的client,但是由于没有网关,不能上网
5、与此同时,因为AP已经断开,所以安卓设备会搜索基站后,通过3G(移动数据)上网
即切换到P2P模式后,安卓设备只能通过自己的3G(移动数据)上网
3、对于iOS——用的是AP模式:
由于iOS系统不支持P2P模式连接,所以iOS用的是AP模式连接神眼。即iOS系统在AP模式下,也可以用自己的3G上网。
但问题又来了:iOS系统可以连接神眼的wifi用神眼的流量上网、也可以用自己的3G网络上网,这种情况下,如何控制iOS系统只用自己的3G网络上网呢?
目前解决方案:
1、用的DHCP协议来分配ip和路由,神眼设备只给手机分配IP&不分配路由,这样iOS系统只能通过自己的3G上网
即iOS系统用的是AP模式,通过自己的3G上网
4、那么手机连接神眼wifi后,是如何通过神眼的wifi进行wifi视频流的传输呢?
目前解决方案:
从手图APP进入主拍摄界面同步wifi视频流的传输时,会访问hardcode的IP地址:192.168.42.1,即神眼相机,
同时也会给手机分配一个IP地址:192.168.42.3,这样来实现固定两个IP地址之间的wifi视频流的传输。
视频流传输使用的是RTSP协议,可进行声音或影像的双向传输。
Q:但是iOS设备在连接了AP的情况下,不是也和android一样为了省电会关闭3G么?难道尝试通过这个热点上网,上不去,他就重新通过自己的3G来上了?
这一点还是有疑问,因为完全可以按照他们说的原理,找一个路由器来模拟神眼的“不分配路由”,我十分怀疑,最终的结果是wifi有信号,但是手机上不去网。
测试结论:iOS设备在连接了AP的情况下,不会关闭3G,这里和安卓是不同的。安卓侧用了官方的API在小松鼠上证明了连接wifi会自动关闭3G网络,但是没查到苹果的相关API,所以为了验证这个问题,在iOS设备上编了一个获取网络状态的小demo,可以看的更直观一些
首先如上述提到:“由于iOS用的是AP模式,并且为了让iOS设备连上神眼后用自己的3G上网,所以连上后是不给分配路由的”,但是通过如下截图可以看到,连接神眼后是是可以获取到路由信息的(这里的路由信息是从3G给分配的,下面实验可以证明),并且可以通过3G访问到外网,应该可以说明iOS设备连接AP后不会关闭3G。

同时,为了验证神眼开发目前对iOS的解决方案“用的DHCP协议来分配ip和路由,神眼设备只给手机分配IP&不分配路由,这样iOS系统只能通过自己的3G上网” ,和“连接神眼设备后获取到的路由信息是从3G分配的“,这里也做了一个实验,也算是对神眼做一个测试
操作步骤:1、连接神眼wifi, 2、关闭手机设置里的“蜂窝移动数据”和“启用3G”开关 (说明一下,这里的关闭开关和前面提到的“连接AP后不会关闭3G”不是一个概念,这里是关闭设置里的开关,前面是指关闭3G接口,不管是安卓还是iOS,都不会自动给关闭3G开关的)
实验结果如下:可以看到网络是不通的,路由地址也为空,也就证明了神眼确实是对iOS设备采取了只分配固定的IP地址,不分配路由

附一个连接staff wifi时的截图,连接staff wifi时是通过wifi上网的




閮戦噸澹版槑锛氭湰鏂囩増鏉冨綊鍘熶綔鑰呮墍鏈夛紝杞浇鏂囩珷浠呬负浼犳挱鏇村淇℃伅涔嬬洰鐨勶紝濡備綔鑰呬俊鎭爣璁版湁璇紝璇风涓鏃堕棿鑱旂郴鎴戜滑淇敼鎴栧垹闄わ紝澶氳阿銆