本发明涉及通信技术领域,尤其涉及一种在安卓WiFi-Direct连接中获取对等设备IP地址的方法及设备。
背景技术:
WiFi-Direct标准是指允许无线网络中的设备无需通过无线路由器即可相互连接。与蓝牙技术类似,这种标准允许无线设备以点对点(P2P)形式互连,而且在传输速度与传输距离方面则比蓝牙有大幅提升。
在安卓(Android)系统的原生WiFi-Direct框架下,两个设备之间连接成功之后,在本地设备处于群组用户(Group Client,简称GC)角色时,其对等设备处于群组拥有者(Group Owner,简称GO)角色,本地设备可以通过WifiP2pInfo.groupOwnerAddress.getHostAddress()方法直接获取对等设备的IP地址;在本地设备处于GO角色时,其对等设备处于GC角色,此时,本地设备只能获取对等设备的MAC信息而无法直接获取对等设备的IP地址。
在不改动原生框架的情况下,行业内通用的获取对等设备IP地址的方法是:
(1)两个设备之间建立WiFi-Direct连接时,通过设置WifiP2pConfig.groupOwnerIntent建议值,尽量建议本地设备被协商分配为GC角色,但当对等设备的WifiP2pConfig.groupOwnerIntent建议值相同时,GO、GC的角色是随机的。
(2)本地设备被分配为GO角色时,通过额外创建Socket并监听,需要等到对等设备主动来连接时,通过Socket.getInetAddress()方法才获取到对等设备的IP地址;在多对等设备连接环境下,还需要根据Android原生WiFi-Direct框架获取到的MAC地址信息来甄选出准确的IP地址。
可见,现有的获取对等设备IP地址的方法复杂、需要分配设备角色、被动的依赖于对等设备,且并不能保证一定能够获取到对等设备的IP地址。
技术实现要素:
针对现有技术的不足,本发明提出了一种在安卓WiFi-Direct连接中获取对等设备IP地址的方法及设备,该方法不改动Android原生WiFi-Direct框架,通过对等设备的MAC地址及表示点对点连接的关键词检索ARP节点地址缓存表,直接获取对等设备的IP地址,解决了现有对等设备IP地址获取方法需复杂、需要分配设备角色、被动的依赖于对等设备的问题。
为了实现上述目的,本发明技术方案如下:
一种在安卓WiFi-Direct连接中获取对等设备IP地址的方法,包括以下步骤:
S1:与对等设备建立WiFi-Direct连接;
S2:请求获取对等网络组信息,依据对等网络组信息确定对等设备相应的MAC地址;
S3:依据所述MAC地址及表示点对点连接的关键词检索ARP节点地址缓存表,确定对等设备相应的IP地址。
进一步地,步骤S2包含以下步骤:
S21:接收到本地的表示WiFi 点对点连接状态已发生改变的广播后,请求获取对等网络组信息;
S22:依据对等网络组信息确定对等设备的角色;
S23:依据对等设备的角色获取对等设备的WifiP2pDevice信息;
S24:从WifiP2pDevice信息中获取对等设备相应的MAC地址。
进一步地,步骤S3包含以下步骤:
S31:读取本地的/proc/net/arp节点,获取ARP节点地址缓存表;
S32:依据所述MAC地址检索ARP节点地址缓存表中的HW address项;
S33:依据“p2p”关键词检索ARP节点地址缓存表中的Device项;
S34:确定ARP节点地址缓存表中HW address项为所述MAC地址且Device项带有“p2p”关键词的一栏中所对应的IP address项,即为对等设备相应的IP地址。
进一步地,步骤S21包含以下步骤:接收到本地的WifiP2pManager.WIFI P2P_CONNECTION CHANGED ACTION广播后,通过WifiP2pManager.requestGroupInfo()方法请求获取对等网络组信息。
进一步地,步骤S22包含以下步骤:依据WifiP2pGroup类中的mIsGroupOwner成员确定本地设备的角色;依据本地设备的角色确定对等设备的角色。
进一步地,步骤S23包含以下步骤:若对等设备为群组拥有者角色,则依据WifiP2pGroup类内的mOwner成员得到对等设备的WifiP2pDevice信息;若对等设备为群组用户角色,则依据WifiP2pGroup类内的mClients成员得到对等设备的WifiP2pDevice信息。
一种在安卓WiFi-Direct连接中获取对等设备IP地址的设备,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算程序,计算程序被处理器执行时实现上述任意一项方法的步骤。
本发明的有益效果:
该方法不改动Android原生WiFi-Direct框架,通过对等设备的MAC地址及表示点对点连接的关键词检索ARP节点地址缓存表,直接获取对等设备的IP地址;且不依赖于对等设备,无需分配设备的角色;方法简单有效,在WiFi-Direct连接状态下,可以保证本地设备能够获取到对等设备的IP地址。
附图说明
图1为本发明方法的流程示意图。
图2为Android系统原生WiFi-Direct框架中WifiP2pGroup类的结构简图。
图3为Android系统原生WiFi-Direct框架中WifiP2pDevice类的结构简图。
图4为ARP节点地址缓存表的结构简图。
具体实施方式
下面结合附图和实施例,进一步阐述本发明。
实施例1:
如图1所示,一种在安卓WiFi-Direct连接中获取对等设备IP地址的方法,包括以下步骤:
S1:与对等设备建立WiFi-Direct连接。
S2:请求获取对等网络组信息,依据对等网络组信息确定对等设备相应的MAC地址。
S3:依据该MAC地址及表示点对点连接的关键词检索ARP节点地址缓存表,确定对等设备相应的IP地址。
该方法不改动Android原生WiFi-Direct框架,通过对等设备的MAC地址及表示点对点连接的关键词检索ARP节点地址缓存表,直接获取对等设备的IP地址;且不依赖于对等设备,无需分配设备的角色;方法简单有效,在WiFi-Direct连接状态下,可以保证本地设备能够获取到对等设备的IP地址。
具体地,步骤S2包含以下步骤S21-S23:
S21:接收到本地的表示WiFi点对点连接状态已发生改变的广播后,请求获取对等网络组信息(或称对等连接组信息)。
两个设备建立WiFi-Direct连接之后,本地设备Android原生WiFi-Direct框架将接收到本地的WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION广播,即表示WiFi P2P连接状态已发生改变,说明本地设备已经与相应的对等设备建立WiFi-Direct连接,然后,本地设备通过WifiP2pManager.requestGroupInfo()方法请求获取对等网络组信息,此时,WifiP2pManager.requestGroupInfo()方法里面的onGroupInfoAvailable()接口会被自动调用,得到WifiP2pGroup类,即所述对等网络组信息。
如图2所示,为WifiP2pGroup类的结构简图。WifiP2pGroup类是一个表示WiFi P2P群组的类。一个P2P群组由一个GO和一个或多个GC组成。其中,mIsGroupOwner成员定义了本地设备为GO角色还是GC角色,mOwner成员包含了本地设备与对等设备两者中属于GO角色的设备的WifiP2pDevice信息,mClients成员包含了本地设备与对等设备两者中属于GC角色的设备的WifiP2pDevice信息。
当本地设备为GO角色时,可能会同时与多个对等设备处于Direct连接,此时,本地设备WifiP2pGroup类的mClients成员中将存有多个对等设备的WifiP2pDevice信息。本地设备一次只能访问一个对等设备,本地设备将要访问哪个对等设备是已知的,本地设备的WiFi-Direct框架会获取当前将要访问的对等设备的相关广播信息,依据该相关广播信息即可从mClients成员中选出相应的对等设备的WifiP2pDevice信息。
S22:依据对等网络组信息确定对等设备的角色。
依据WifiP2pGroup类中的mIsGroupOwner成员可确定对等设备是处于群组拥有者角色还是群组用户角色状态。
实际上,mIsGroupOwner成员定义的是本地设备的角色,确定了本地设备的角色,对等设备的角色也就确定了。因为,两个设备之间采用WiFi-Direct连接时,当本地设备为GO角色时,其对等设备一定为GC角色;当本地设备为GC角色时,其对等设备一定为GO角色。因此,可以借助WifiP2pGroup类中的mIsGroupOwner成员确定对等设备的角色。
S23:依据对等设备的角色获取对等设备的WifiP2pDevice信息。
若对等设备为GO角色,则依据WifiP2pGroup类内的mOwner成员得到对等设备的WifiP2pDevice信息;若对等设备为GC角色,则依据WifiP2pGroup类内的mClients成员得到对等设备的WifiP2pDevice信息。
S24:从WifiP2pDevice信息中获取对等设备相应的MAC地址。
WifiP2pDevice类的结构如图3所示,WifiP2pDevice里面的deviceAddress即为对等设备的MAC地址。
具体地,步骤S3包含以下步骤S31-S34:
S31:读取本地设备的/proc/net/arp节点,获取ARP节点地址缓存表。
S32:依据MAC地址检索ARP节点地址缓存表中的HW address项。
S33:依据“p2p”关键词检索ARP节点地址缓存表中的Device项。
S34:确定ARP节点地址缓存表中HW address项为所述MAC地址且Device项带有“p2p”关键词的一栏中所对应的IP address项,即为对等设备相应的IP地址。
如图4所示,为ARP节点地址缓存表的简图。ARP节点地址缓存表保存了本地设备所连接的其它各目标设备的地址等信息,记录了各目标设备的MAC地址与IP地址的对应关系,其中包含了目标设备的名称(Device项)、MAC地址(HW address项)、IP地址(IP address项)等信息。
本地设备不仅会与各目标设备建立点对点连接,也会采用其它的方式与各目标设备进行连接。其中,采用点对点方式与本地设备建立连接的目标设备,其在ARP节点地址缓存表中的名称一定会带有“p2p”字样的关键词;再结合已获取的对等设备的MAC地址从这些名称中带有“p2p”字样的设备中确定相应的对等设备,便可唯一的找到该对等设备的IP地址。
实施例2:
本实施例提供了一种在安卓WiFi-Direct连接中获取对等设备IP地址的设备,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算程序,计算程序被处理器执行时实现实施例1的方法的步骤S1-S3。
具体地,计算程序被处理器执行时还实现实施例1的方法的步骤S21-S23。
具体地,计算程序被处理器执行时还实现实施例1的方法的步骤S31-S34。
以上所述的仅是本发明的优选实施方式,本发明不限于以上实施例。可以理解,本领域技术人员在不脱离本发明的基本构思的前提下直接导出或联想到的其它改进和变化均应认为包含在本发明的保护范围之内。