一种wifi共享的方法及系统

申请号 CN201610908928.9 申请日 2016-10-18 公开(公告)号 CN106507298A 公开(公告)日 2017-03-15
申请人 武汉斗鱼网络科技有限公司; 发明人 丁鹏;
摘要 本 发明 提供了一种wifi共享的方法及系统,方法包括: 服务器 接收发送的第一 请求 信息,根据第一请求信息查找客户端当前 位置 所属查找区域内的wifi信息,并将查询到的可用wifi的ID返回至客户端;这样,无论用户处于何地,只要通过客户端发送第一请求信息后,即可接收到服务器返回的可用wifi的ID;客户端可以基于可用wifi的ID扫描所述可用wifi信息后获取一wifi的名称及对应的ID,并将该wifi的名称及对应的ID封装至第二请求信息中,将第二请求信息发送至服务器;服务器可以基于wifi的名称及对应的ID,将对应的wifi名称和密码发送至客户端,那么客户端就可以基于wifi名称和密码连接wifi;这样,用户就能随时随地地连接到免费wifi,提高了体验度且降低了使用成本。
权利要求

1.一种wifi共享的方法,其特征在于,所述方法包括:
服务器接收客户端发送的第一请求信息,根据所述第一请求信息查找所述客户端当前位置所属查找区域内的wifi信息,并将查询到的可用wifi的ID返回至所述客户端;
服务器接收所述客户端发送的第二请求信息,根据所述第二请求信息向所述客户端发送wifi名称和密码,所述客户端基于所述wifi的名称和密码连接所述wifi;其中,所述第一请求信息中包括:所述客户端当前位置信息;所述第二请求信息中包括:所述客户端基于可用wifi的ID扫描所述可用wifi信息后获取的一wifi的名称及对应的ID。
2.如权利要求1所述的方法,其特征在于,服务器接收客户端发送的第一请求信息之前,所述方法还包括:
所述服务器确定数据库表名及数值类型,基于所述数据库表名及所述数值类型构建数据库的表;
将N个客户端上传的wifi信息储存至所述数据库的表中;其中,
所述wifi信息包括:客户端ID、wifi名称、wifi密码及客户端当前所在的位置信息。
3.如权利要求1所述的方法,其特征在于,所述根据所述第一请求信息查找所述客户端当前位置所属查找区域的wifi信息具体包括:
所述服务器根据所述客户端当前位置中的经度值和纬度值计算所述客户端的当前坐标;
以所述当前坐标为基准点,按照预设的查找距离定义出四个范围点,形成一查找区域;
根据所述第一请求信息在所述查找区域内查找可用wifi信息。
4.一种wifi共享的方法,其特征在于,所述方法包括:
客户端发送第一请求信息,以使服务器基于所述第一请求信息查找所述客户端当前位置所属查找区域内的wifi信息,并将查询到的可用wifi的ID返回至所述客户端;
所述客户端根据所述可用wifi的ID扫描所述可用wifi信息后,获取一wifi的名称及对应的ID,并将所述wifi的名称及对应的ID封装至第二请求信息中,将所述第二请求信息发送至所述服务器,以使所述服务器基于所述第二请求信息向所述客户端发送wifi名称和密码;
所述客户端基于所述wifi的名称和密码连接所述wifi;其中,所述第一请求信息中包括:所述客户端当前位置信息。
5.如权利要求4所述的方法,其特征在于,当所述客户端基于所述wifi名称和密码连接所述wifi后,所述方法还包括:
所述客户端生成连接标记以记录当前的连接状态;
当退出应用时,查询所述连接标记是否还存在wifi连接,当确定还存在wifi连接时,断开当前连接。
6.一种服务器,其特征在于,所述服务器包括:
接收单元,用于接收客户端发送的第一请求信息及第二请求信息;
查询单元,用于根据所述第一请求信息查找所述客户端当前位置所属查找区域内的wifi信息,并将查询到的可用所述wifi的ID返回至所述客户端;
发送单元,用于根据所述第二请求信息向所述客户端发送wifi的名称和密码,所述客户端基于所述wifi的名称和密码连接所述wifi;其中,
所述第一请求信息中包括:所述客户端当前位置信息;所述第二请求信息中包括:所述客户端基于所述可用wifi的ID扫描所述可用wifi信息后获取的一wifi的名称及对应的ID。
7.如权利要求6所述的服务器,其特征在于,所述服务器还包括构建单元及储存单元:
在所述接收单元接收客户端发送的第一请求信息之前,
所述构建单元用于:基于所述数据库表名及所述数值类型构建数据库的表;
所述储存单元用于:将N个客户端上传的wifi信息储存至所述数据库的表中,所述wifi信息包括:客户端ID、wifi名称、wifi密码及客户端当前所在的位置信息。
8.如权利要求6所述的服务器,其特征在于,所述查找单元根据所述第一请求信息查找所述客户端当前位置所属查找区域内的wifi信息具体包括:
根据所述客户端当前位置中的经度值和纬度值计算所述客户端的当前坐标;
以所述当前坐标为基准点,按照预设的查找距离定义出四个范围点,形成一查找区域;
根据所述第一请求信息在所述查找区域内查找可用wifi信息。
9.一种wifi共享的系统,其特征在于,所述系统包括:
客户端,用于向服务器发送第一请求信息;
所述服务器,用于基于发送的第一请求信息查找所述客户端当前位置所属查找区域内的wifi信息,并将查询到的可用wifi的ID返回至所述客户端;
所述客户端,用于基于所述可用wifi的ID扫描所述可用wifi信息后,获取一wifi的名称及对应的ID,并将所述wifi的名称及对应的ID封装至第二请求信息中,将所述第二请求信息发送至所述服务器;
所述服务器,用于基于所述第二请求信息向所述客户端发送wifi的名称和密码;
所述客户端,用于基于所述wifi的名称和密码连接所述wifi;其中,所述第一请求信息中包括:所述客户端当前位置信息。
10.如权利要求9所述的系统,其特征在于,当所述客户端基于所述wifi名称和密码连接所述wifi后,所述客户端还用于:
生成连接标记以记录当前的连接状态;
当退出应用时,查询所述连接标记是否还存在wifi连接,当确定还存在wifi连接时,断开当前连接。

说明书全文

一种wifi共享的方法及系统

技术领域

[0001] 本发明属于通信技术领域,尤其涉及一种wifi共享的方法及系统。

背景技术

[0002] 随着电子产品的不断发展,智能终端(比如手机、平板电脑等)基本上已经成为人手必备的电子产品。随着智能终端的普及,使用者对网络的依赖越来越大,比如,使用聊天软件、看直播软件中的视频等。
[0003] 但是智能终端自带移动流量有限,不能长时间的观看视频。而使用者又无法根据当前所处的位置信息随时找到免费的wifi来观看视频,导致用户体验度下降且使用成本增加。

发明内容

[0004] 针对现有技术存在的问题,本发明实施例提供了一种wifi共享的方法及系统,以解决现有技术中用户无法随时根据当前的位置信息连接到免费wifi来使用智能终端的视频软件,导致用户体验度下降且使用成本增加的技术问题。
[0005] 本发明提供一种wifi共享的方法,所述方法包括:
[0006] 服务器接收客户端发送的第一请求信息,根据所述第一请求信息查找所述客户端当前位置所属查找区域内的wifi信息,并将查询到的可用wifi的ID返回至所述客户端;
[0007] 服务器接收所述客户端发送的第二请求信息,根据所述第二请求信息向所述客户端发送wifi名称和密码,所述客户端基于所述wifi的名称和密码连接所述wifi;其中,[0008] 所述第一请求信息中包括:所述客户端当前位置信息;所述第二请求信息中包括:所述客户端基于可用wifi的ID扫描所述可用wifi信息后获取的一wifi的名称及对应的ID。
[0009] 上述方案中,服务器接收客户端发送的第一请求信息之前,所述方法还包括:
[0010] 所述服务器确定数据库表名及数值类型,基于所述数据库表名及所述数值类型构建数据库的表;
[0011] 将N个客户端上传的wifi信息储存至所述数据库的表中;其中,
[0012] 所述wifi信息包括:客户端ID、wifi名称、wifi密码及客户端当前所在的位置信息。
[0013] 上述方案中,所述根据所述第一请求信息查找所述客户端当前位置所属查找区域的wifi信息具体包括:
[0014] 所述服务器根据所述客户端当前位置中的经度值和纬度值计算所述客户端的当前坐标;
[0015] 以所述当前坐标为基准点,按照预设的查找距离定义出四个范围点,形成一查找区域;
[0016] 根据所述第一请求信息在所述查找区域内查找可用wifi信息。
[0017] 本发明还提供一种wifi共享的方法,所述方法包括:
[0018] 客户端发送第一请求信息,以使服务器基于所述第一请求信息查找所述客户端当前位置所属查找区域内的wifi信息,并将查询到的可用wifi的ID返回至所述客户端;
[0019] 所述客户端根据所述可用wifi的ID扫描所述可用wifi信息后,获取一wifi的名称及对应的ID,并将所述wifi的名称及对应的ID封装至第二请求信息中,将所述第二请求信息发送至所述服务器,以使所述服务器基于所述第二请求信息向所述客户端发送wifi名称和密码;
[0020] 所述客户端基于所述wifi的名称和密码连接所述wifi;其中,所述第一请求信息中包括:所述客户端当前位置信息。
[0021] 上述方案中,当所述客户端基于所述wifi名称和密码连接所述wifi后,所述方法还包括:
[0022] 所述客户端生成连接标记以记录当前的连接状态;
[0023] 当退出应用时,查询所述连接标记是否还存在wifi连接,当确定还存在wifi连接时,断开当前连接。
[0024] 本发明提供一种服务器,所述服务器包括:
[0025] 接收单元,用于接收客户端发送的第一请求信息及第二请求信息;
[0026] 查询单元,用于根据所述第一请求信息查找所述客户端当前位置所属查找区域内的wifi信息,并将查询到的可用所述wifi的ID返回至所述客户端;
[0027] 发送单元,用于根据所述第二请求信息向所述客户端发送wifi的名称和密码,所述客户端基于所述wifi的名称和密码连接所述wifi;其中,
[0028] 所述第一请求信息中包括:所述客户端当前位置信息;所述第二请求信息中包括:所述客户端基于所述可用wifi的ID扫描所述可用wifi信息后获取的一wifi的名称及对应的ID。
[0029] 上述方案中,所述服务器还包括构建单元及储存单元:在所述接收单元接收客户端发送的第一请求信息之前,
[0030] 所述构建单元用于:基于所述数据库表名及所述数值类型构建数据库的表;
[0031] 所述储存单元用于:将N个客户端上传的wifi信息储存至所述数据库的表中,所述wifi信息包括:客户端ID、wifi名称、wifi密码及客户端当前所在的位置信息。
[0032] 上述方案中,所述查找单元根据所述第一请求信息查找所述客户端当前位置所属查找区域内的wifi信息具体包括:
[0033] 根据所述客户端当前位置中的经度值和纬度值计算所述客户端的当前坐标;
[0034] 以所述当前坐标为基准点,按照预设的查找距离定义出四个范围点,形成一查找区域;
[0035] 根据所述第一请求信息在所述查找区域内查找可用wifi信息。
[0036] 本发明提供一种wifi共享的系统,所述系统包括:
[0037] 客户端,用于向服务器发送第一请求信息;
[0038] 所述服务器,用于基于发送的第一请求信息查找所述客户端当前位置所属查找区域内的wifi信息,并将查询到的可用wifi的ID返回至所述客户端;
[0039] 所述客户端,用于基于所述可用wifi的ID扫描所述可用wifi信息后,获取一wifi的名称及对应的ID,并将所述wifi的名称及对应的ID封装至第二请求信息中,将所述第二请求信息发送至所述服务器;
[0040] 所述服务器,用于基于所述第二请求信息向所述客户端发送wifi的名称和密码;
[0041] 所述客户端,用于基于所述wifi的名称和密码连接所述wifi;其中,所述第一请求信息中包括:所述客户端当前位置信息。
[0042] 上述方案中,当所述客户端基于所述wifi名称和密码连接所述wifi后,所述客户端还用于:
[0043] 生成连接标记以记录当前的连接状态;
[0044] 当退出应用时,查询所述连接标记是否还存在wifi连接,当确定还存在wifi连接时,断开当前连接。
[0045] 本发明提供了一种wifi共享的方法及系统,所述方法包括:服务器接收客户端发送的第一请求信息,根据所述第一请求信息在数据库中查找所述客户端当前位置所属查找区域内的wifi信息,并将查询到的可用wifi的ID返回至所述客户端;所述第一请求信息中包括:所述客户端当前位置信息;这样,无论用户处于何地,只要通过客户端发送当前位置信息后,即可接收到服务器返回的可用wifi的ID;客户端接收到可用wifi的ID后,可以基于可用wifi的ID扫描所述可用wifi信息后获取一wifi的名称及对应的ID,并将该wifi的名称及对应的ID封装至第二请求信息中,将第二请求信息发送至服务器;服务器接收到所述客户端发送的第二请求信息后,可以基于wifi名称及对应的ID,将对应的wifi名称和密码发送至客户端,那么所述客户端就可以基于所述wifi名称和密码连接所述wifi;这样,用户就可以根据当前位置信息能随时随地地连接到免费wifi,提高了体验度且降低了使用成本。附图说明
[0046] 图1为本发明实施例提供的wifi共享的系统结构示意图;
[0047] 图2为本发明实施例提供的wifi共享的方法流程示意图;
[0048] 图3为本发明实施例提供的wifi共享的方法又一流程示意图;
[0049] 图4为为本发明实施例提供的wifi共享的方法的信号交互示意图;
[0050] 图5为本发明实施例提供的服务器的结构示意图。

具体实施方式

[0051] 为了避免用户不能随时连接到免费wifi来使用智能终端的视频软件,导致用户体验度下降且使用成本增加的技术问题,本发明提供了一种wifi共享的方法,其特征在于,所述方法包括:服务器接收客户端发送的第一请求信息,根据所述第一请求信息查找所述客户端当前位置所属查找区域内的wifi信息,并将查询到的可用wifi的ID返回至所述客户端;服务器接收所述客户端发送的第二请求信息,根据所述第二请求信息向所述客户端发送wifi的名称和密码,所述客户端基于所述wifi的名称和密码连接所述wifi;其中,所述第一请求信息中包括:所述客户端当前位置信息;所述第二请求信息中包括:所述客户端基于可用wifi的ID扫描所述可用wifi信息后获取的一wifi的名称及对应的ID。
[0052] 下面通过附图及具体实施例对本发明的技术方案做进一步的详细说明。
[0053] 实施例一
[0054] 在介绍本发明的方法实施例之前,先介绍本发明实施例中wifi共享的系统架构,如图1所示,该系统包括:客户端101和服务器102。服务器102如图1所示,可与N个客户端101实现通信连接,N为自然数,其中,客户端101、服务器102之间的通信方式可以是有线通信,也可以是无线通信,所述客户端101具体可以是智能手机,也可以是平板电脑,还可以是智能穿戴设备等等,本申请对此不作限定。
[0055] 本实施例提供一种wifi共享的方法,该方法应用于服务器侧,如图2所示,该方法包括:
[0056] S201,服务器接收客户端发送的第一请求信息,根据所述第一请求信息查找所述客户端当前位置所属查找区域内的wifi信息,并将查询到的可用wifi的ID返回至所述客户端。
[0057] 本步骤中,服务器接收客户端发送的第一请求信息之前,还用于将N个客户端上传的wifi信息储存至预先建立的数据库的表中,这里,服务器是通过确定数据库表名及数值类型,基于所述数据库表名及所述数值类型构建数据库的表。所述数据库可以为mysql数据库;所述wifi信息包括:客户端ID、wifi名称、wifi密码及客户端当前所在的位置信息。这里,所述客户端ID是用于识别客户端所属用户身份的唯一标识,可以是用户名称,也可以是用户编号之类的,本发明中是以移动设备国际身份码(IMEI,International Mobile Equipment Identity)为客户端ID。所述wifi的ID是指wifi的媒体访问控制(MAC,Media Access Control)地址;所述客户端当前所在的位置信息包括:位置经度及位置纬度。
[0058] 这里,客户端上传wifi的具体过程为:当客户端在某个地方已经连接上wifi信息时,利用Android中java命令:Runtime.getRuntime().exec()来执行cat/data/misc/wifi/*.conf\n,去模拟命令行来得到具体的wifi信息;在得到该wifi信息后,通过GPS自动获取当前位置信息,在获取到当前位置的经纬度坐标后,连同wifi信息及客户端ID一起上传至服务器中。
[0059] 当用户通过客户端上传完wifi信息并储存成功后,服务器会向客户端返回储存成功的信息提示,用户可以根据该信息提示执行相应的操作,比如,根据该信息提示执行相应奖励申请请求,那么服务器就会根据该请求查询对应的客户端ID,为用户发送相应的奖励。
[0060] 这里,所述数据库的表结构如表1所示:
[0061] 表1
[0062]
[0063]
[0064] 这里,由于数据库将客户端ID设置为自增长模式,因此,数据库中每增加一个wifi信息时,就给客户端ID自动匹配一个序号。
[0065] 当用户想通过客户端寻找免费的wifi时,先通过客户端向服务器发送第一请求信息。
[0066] 所述第一请求信息中包括:客户端当前的位置信息,所述位置信息是由客户端通过GPS数据及基站数据来确定的得到经度坐标及纬度坐标。
[0067] 这里,在客户端向服务器发送第一请求信息之前,还需判断是否连连接上移动网络,如果确定连接上移动网络,则会允许执行向服务器发送第一请求信息;如果没有连接上任何网络,则提示是否开启wifi或移动网络。
[0068] 并且,如果已经连接上wifi,则可以提示用户执行将wifi信息上传至服务器的操作。
[0069] 当服务器接收到第一请求信息后,根据所述第一请求信息查找所述客户端当前位置所属查找区域内的wifi信息,并将查询到的可用wifi的ID返回至所述客户端。其中,所述第一请求信息中包括:所述客户端当前位置信息。
[0070] 具体地,所述服务器接收到第一请求信息后,将第一请求信息中的经度用$lng赋值,将纬度用$lat赋值;
[0071] 利用代码
[0072] $dlng=2*asin(sin($distance/(2*EARTH_RADIUS)))/cos(deg2rad($lat));将经度转为经度坐标;
[0073] 再利用代码$dlng=rad2deg($dlng);将经度坐标转为经度值。
[0074] 同样的,利用代码$dlat=$distance/EARTH_RADIUS;将纬度转化为纬度坐标;
[0075] 再利用代码$dlat=rad2deg($dlat);将纬度坐标转化为纬度值。其中,EARTH_RADIUS常量,该常量是地球的半径,平均值为6371000米,Distance为所需要得到客户端周围点的半径,这里我们将该值设置为100m,以能确保wifi信号的强度。
[0076] 当经度值和纬度值都确定之后,基于所述经度值及所述纬度值确定客户端的当前坐标,以所述当前坐标为基准点,按照预设的查找距离定义出四个范围点,形成一查找区域。其中,每个范围点都为一个数组,分别为当前坐标的左上点left-top、当前坐标的右上点right-top、当前坐标的左下点left-bottom及当前坐标的右下点rightt-bottom;这四个点形成一查找区域,所述查找区域的形状为方形,边长为100mm。
[0077] 具体地,可以利用以下代码来分别确定四个范围点:
[0078] left-top:[lat+dlat,lng–dlng]//左上点
[0079] right-top:[lat+dlat,lng+dlng]//右上点
[0080] left-bottom:[lat–dlat,lng–dlng]//左下点
[0081] right-bottom:[lat–dlat,lng+dlng]//右下点
[0082] 当服务器将查找区域确定好之后,使用sql语句来查询该区域中是否有存在可用的wifi信息,其查询语句如下:
[0083] select*from表名where Location_lat<=left-top[0]and Location_lat<=right-top[0]and Location_lat>=left-bottom[0]and Location_lat>=right-bottom[0]and Locaton_lng<=left-top[1]and Locaton_lng<=right-top[1]and Location_lng>=left-bottom[1]and Location_lng>=right-bottom[1];
[0084] 使用上述语句即可查询到该查询范围内是否有可用wifi信息存在,如确定有可用wifi存在,则将查询到的可用wifi的ID以字符串编码的形式返回至所述客户端。
[0085] 这里,为了防止服务器在提供wifi的信息时遭到泄露,所以将wifi的ID以字符串编码的形式返回。
[0086] S202,服务器接收所述客户端发送的第二请求信息,根据所述第二请求信息向所述客户端发送wifi名称和密码,所述客户端基于所述wifi名称和密码连接所述wifi。
[0087] 本步骤中,客户端接收到可用wifi的ID后,利用wifiManager中的startScan();来扫描可用的wifi信息,其中,扫描的间隔定义为200毫秒执行一次,当扫描超过30秒则自动关闭扫描功能。
[0088] 当扫描出wifi信息后,并将该信息通过广播发送出,利用所述信息获取wifi的名称及对应的ID。并将所述wifi的名称、对应的ID及将wifi的ID字符串编码封装至第二请求信息中,将第二请求信息发送至服务器。
[0089] 当服务器接收到第二请求信息后,首先将返回的wifi的ID组合字符串编码进行拆分,拆分后,根据第二请求信息中的wifi名称,查询数据库中该ID字段内是否有相应wifi名称与之匹配,有则将wifi名称与密码一并返回至客户端,没有则返回空,提示客户端没有查询到该范围内的wifi,那么客户端则继续扫描可用的wifi信息。
[0090] 当所述客户端接收到wifi名称和密码后,利用wifi名称和密码连接所述wifi,具体可以通过如下代码实现:
[0091] WifiConfiguration wifiConfig=createWifiInfo(ssid,password,type);
[0092] 在该代码中,ssid为wifi的名称,password为wifi的密码,type为连接状态,[0093] 作为可选的实施例:
[0094] 当客户端连接上所述wifi后,所述方法还包括:生成连接标记以记录当前的连接状态;当退出应用时,查询所述连接标记是否还存在wifi连接,当确定还存在wifi连接时,断开当前连接。当断开当前连接后,当客户端再次位于该区域范围内时,即使搜索到该wifi信息,也不会自动连接,只有再次发送请求才会连接,这样不但就确保了wifi信号的强度,也确保了wifi信息的安全性。
[0095] 这里,当客户端再次位于该区域范围内时,即使搜索到该wifi信息,也不会自动连接的具体实现方式为:
[0096] 将type填写成WifiCipherType.WIFICIPHER_WPA。
[0097] 以上是基于服务器侧wifi共享的方法的具体实施过程。
[0098] 实施例二
[0099] 本发明还提供一种wifi共享的方法,该方法应用在客户端侧,该方法包括:
[0100] S301,客户端发送第一请求信息,以使服务器基于所述第一请求信息查找所述客户端当前位置所属查找区域内的wifi信息,并将查询到的可用wifi的ID返回至所述客户端。
[0101] 本步骤中,服务服务器接收客户端发送的第一请求信息之前,还用于将N个客户端上传的wifi信息储存至预先建立的数据库的表中,这里,服务器是通过确定数据库表名及数值类型,基于所述数据库表名及所述数值类型构建数据库的表。所述数据库可以为mysql数据库;所述wifi信息包括:客户端ID、wifi名称、wifi密码及客户端当前所在的位置信息。这里,所述客户端ID是用于识别客户端所属用户身份的唯一标识,可以是用户名称,也可以是用户编号之类的,本发明中是以移动设备国际身份码IMEI为客户端ID。所述wifi的ID是指wifi的MAC地址;所述客户端当前所在的位置信息包括:位置经度及位置纬度。
[0102] 具体地,客户端上传wifi的具体过程为:当客户端在某个地方已经连接上wifi信息时,利用Android中java命令:Runtime.getRuntime().exec()来执行cat/data/misc/wifi/*.conf\n,去模拟命令行来得到具体的wifi信息;在得到该wifi信息后,通过GPS自动获取当前位置信息,在获取到当前位置的经纬度坐标后,连同wifi信息及客户端ID一起上传至服务器中。
[0103] 当用户通过客户端上传完wifi信息并储存成功后,服务器会向客户端返回储存成功的信息提示,用户可以根据该信息提示执行相应的操作,比如,根据该信息提示执行相应奖励申请请求,那么服务器就会根据该请求查询向对应的客户端ID,为用户发送相应的奖励。
[0104] 这里,所述数据库的表结构如表1所示:
[0105] 表1
[0106]表名 类型 描述 默认值
ID Int 数据库自增长  
User_id Char 客户端ID  
Wifi_name Char Wifi名称  
Wifi_pwd Char Wif密码  
Location_lat Long 位置经度  
Locaton_lng Long 位置纬度  
[0107] 这里,由于数据库将客户端ID设置为自增长模式,因此,数据库中每增加一个wifi信息时,就给客户端ID自动匹配一个序号。
[0108] 当用户想通过客户端寻找免费的wifi时,先通过客户端向服务器发送第一请求信息。
[0109] 所述第一请求信息中包括:客户端当前的位置信息,所述位置信息是由客户端通过GPS数据及基站数据来确定的得到经度坐标及纬度坐标。
[0110] 这里,在客户端向服务器发送第一请求信息之前,还需判断是否连连接上移动网络,如果确定连接上移动网络,则会允许执行向服务器发送第一请求信息;如果没有连接上任何网络,则提示是否开启wifi或移动网络。
[0111] 并且,如果已经连接上wifi,则可以提示用户执行将wifi信息上传至服务器的操作。
[0112] 当服务器接收到第一请求信息后,根据所述第一请求信息查找所述客户端当前位置所属查找区域内的wifi信息,并将查询到的可用wifi的ID返回至所述客户端。其中,所述第一请求信息中包括:所述客户端当前位置信息。
[0113] 具体地,所述服务器接收到第一请求信息后,将第一请求信息中的经度用$lng赋值,将纬度用$lat赋值;
[0114] 利用代码
[0115] $dlng=2*asin(sin($distance/(2*EARTH_RADIUS)))/cos(deg2rad($lat));将经度转为经度坐标;
[0116] 再利用代码$dlng=rad2deg($dlng);将经度坐标转为经度值。
[0117] 同样的,利用代码$dlat=$distance/EARTH_RADIUS;将纬度转化为纬度坐标;
[0118] 再利用代码$dlat=rad2deg($dlat);将纬度坐标转化为纬度值。其中,EARTH_RADIUS常量,该常量是地球的半径,平均值为6371000米,Distance为所需要得到客户端周围点的半径,这里我们将该值设置为100m,以能确保wifi信号的强度。
[0119] 当经度值和纬度值都确定之后,基于所述经度值及所述纬度值确定客户端的当前坐标,以所述当前坐标为基准点,按照预设的查找距离定义出四个范围点,形成一查找区域。其中,每个范围点都为一个数组,分别为当前坐标的左上点left-top、当前坐标的右上点right-top、当前坐标的左下点left-bottom及当前坐标的右下点rightt-bottom;这四个点形成一查找区域,所述查找区域的形状为方形,边长为100mm。
[0120] 具体地,可以利用以下代码来分别确定四个范围点:
[0121] left-top:[lat+dlat,lng–dlng]//左上点
[0122] right-top:[lat+dlat,lng+dlng]//右上点
[0123] left-bottom:[lat–dlat,lng–dlng]//左下点
[0124] right-bottom:[lat–dlat,lng+dlng]//右下点
[0125] 当服务器将查找区域确定好之后,使用sql语句来查询该区域中是否有存在可用的wifi信息,其查询语句如下:
[0126] select*from表名where Location_lat<=left-top[0]and Location_lat<=right-top[0]and Location_lat>=left-bottom[0]and Location_lat>=right-bottom[0]and Locaton_lng<=left-top[1]and Locaton_lng<=right-top[1]and Location_lng>=left-bottom[1]and Location_lng>=right-bottom[1];
[0127] 使用上述语句即可查询到该查询范围内是否有可用wifi信息存在,如确定有可用wifi存在,则将查询到的可用wifi的ID以字符串编码的形式返回至所述客户端。
[0128] 这里,为了防止服务器在提供wifi的信息时遭到泄露,所以将wifi的ID以字符串编码的形式返回。
[0129] S302,所述客户端根据所述可用wifi的ID扫描所述可用wifi信息后,获取一wifi的名称及对应的ID,并将所述wifi的名称及对应的ID封装至第二请求信息中,将所述第二请求信息发送至所述服务器,以使所述服务器基于所述第二请求信息向所述客户端发送wifi名称和密码。
[0130] 本步骤中,客户端接收到可用wifi的ID后,利用wifiManager中的startScan();来扫描可用的wifi信息,其中,扫描的间隔定义为200毫秒执行一次,当扫描超过30秒则自动关闭扫描功能。
[0131] 当扫描出wifi信息后,并将该信息通过广播发送出,利用所述信息获取wifi的名称及对应的ID。并将所述wifi的名称、对应的ID及将wifi的ID字符串编码封装至第二请求信息中,将第二请求信息发送至服务器。
[0132] 当服务器接收到第二请求信息后,首先将返回的wifi的ID组合字符串编码进行拆分,拆分后,根据第二请求信息中的wifi名称,查询数据库中该ID字段内是否有相应wifi名称与之匹配,有则将wifi名称与密码一并返回至客户端,没有则返回空,提示客户端没有查询到该范围内的wifi,那么客户端则继续扫描可用的wifi信息。
[0133] S303,所述客户端基于所述wifi的名称和密码连接所述wifi。
[0134] 本步骤中,当所述客户端接收到wifi名称和密码后,利用wifi名称和密码连接所述wifi,具体可以通过如下代码实现:
[0135] WifiConfiguration wifiConfig=createWifiInfo(ssid,password,type);
[0136] 在该代码中,ssid为wifi的名称,password为wifi的密码,type为连接状态,[0137] 作为可选的实施例:
[0138] 当客户端连接上所述wifi后,所述方法还包括:生成连接标记以记录当前的连接状态;当退出应用时,查询所述连接标记是否还存在wifi连接,当确定还存在wifi连接时,断开当前连接。当断开当前连接后,当客户端再次位于该区域范围内时,即使搜索到该wifi信息,也不会自动连接,只有再次发送请求才会连接,这样不但就确保了wifi信号的强度,也确保了wifi信息的安全性。
[0139] 这里,当客户端再次位于该区域范围内时,即使搜索到该wifi信息,也不会自动连接的具体实现方式为:
[0140] 将type填写成WifiCipherType.WIFICIPHER_WPA。
[0141] 以上是基于客户端侧wifi共享的方法的具体实施过程。
[0142] 实施例三
[0143] 本发明还提供一种wifi共享的方法,该方法中客户端和服务器主要的交互过程为:
[0144] 客户端发送第一请求信息;
[0145] 服务器接收所述第一请求信息,根据所述第一请求信息查找所述客户端当前位置所属查找区域内的wifi信息,并将查询到的可用wifi的ID返回至所述客户端;
[0146] 所述客户端根据所述可用wifi的ID扫描所述可用wifi信息后,获取一wifi的名称及对应的ID,并将所述wifi的名称及对应的ID封装至第二请求信息中,将所述第二请求信息发送至所述服务器;
[0147] 服务器基于所述第二请求信息向所述客户端发送wifi名称和密码;
[0148] 所述客户端基于所述wifi名称和密码连接所述wifi。
[0149] 本发明中,所述客户端当前位置所属查找区域内的wifi信息是由N个客户端上传至所述服务器中的。具体地,当客户端在某个地方已经连接上wifi信息时,利用Android中java命令:Runtime.getRuntime().exec()来执行cat/data/misc/wifi/*.conf\n,去模拟命令行来得到具体的wifi信息;在得到该wifi信息后,通过GPS自动获取当前位置信息,在获取到当前位置的经纬度坐标后,连同wifi信息及客户端ID一起上传至服务器中。
[0150] 服务器接收客户端发送的第一请求信息之前,将N个客户端上传的wifi信息储存至预先建立的数据库的表中,这里,服务器是通过确定数据库表名及数值类型,基于所述数据库表名及所述数值类型构建数据库的表。所述数据库可以为mysql数据库;所述wifi信息包括:客户端ID、wifi名称、wifi密码及客户端当前所在的位置信息。这里,所述客户端ID是用于识别客户端所属用户身份的唯一标识,可以是用户名称,也可以是用户编号之类的,本发明中是以移动设备国际身份码IMEI为客户端ID。所述wifi的ID是指wifi的MAC地址;所述客户端当前所在的位置信息包括:位置经度及位置纬度。
[0151] 当用户通过客户端上传完wifi信息并储存成功后,服务器会向客户端返回储存成功的信息提示,用户可以根据该信息提示执行相应的操作,比如,根据该信息提示执行相应奖励申请请求,那么服务器就会根据该请求查询向对应的客户端ID,为用户发送相应的奖励。
[0152] 这里,所述数据库的表结构如表1所示:
[0153] 表1
[0154]表名 类型 描述 默认值
ID Int 数据库自增长  
User_id Char 客户端ID  
Wifi_name Char Wifi名称  
Wifi_pwd Char Wif密码  
Location_lat Long 位置经度  
Locaton_lng Long 位置纬度  
[0155] 这里,由于数据库将客户端ID设置为自增长模式,因此,数据库的表中每增加一个wifi信息时,就给客户端ID自动匹配一个序号。
[0156] 具体地,请参见图4,本发明提供的wifi共享方法的结构图:
[0157] S1,当用户想通过客户端寻找免费的wifi时,先通过客户端向服务器发送第一请求信息。
[0158] 所述第一请求信息中包括:客户端当前的位置信息,所述位置信息是由客户端通过GPS数据及基站数据来确定的得到经度坐标及纬度坐标。
[0159] 这里,在客户端向服务器发送第一请求信息之前,还需判断是否连连接上移动网络,如果确定连接上移动网络,则会允许执行向服务器发送第一请求信息;如果没有连接上任何网络,则提示是否开启wifi或移动网络。
[0160] 并且,如果已经连接上wifi,则可以提示用户执行将wifi信息上传至服务器的操作。
[0161] S2,服务器根据所述第一请求信息在数据库中查找所述客户端当前位置所属查找区域内的wifi信息,并将查询到的可用wifi的ID返回至所述客户端。
[0162] 具体地,所述服务器接收到第一请求信息后,将第一请求信息中的经度用$lng赋值,将纬度用$lat赋值;
[0163] 利用代码
[0164] $dlng=2*asin(sin($distance/(2*EARTH_RADIUS)))/cos(deg2rad($lat));将经度转为经度坐标;
[0165] 再利用代码$dlng=rad2deg($dlng);将经度坐标转为经度值。
[0166] 同样的,利用代码$dlat=$distance/EARTH_RADIUS;将纬度转化为纬度坐标;
[0167] 再利用代码$dlat=rad2deg($dlat);将纬度坐标转化为纬度值。其中,EARTH_RADIUS常量,该常量是地球的半径,平均值为6371000米,Distance为所需要得到客户端周围点的半径,这里我们将该值设置为100m,以能确保wifi信号的强度。
[0168] 当经度值和纬度值都确定之后,基于所述经度值及所述纬度值确定客户端的当前坐标,以所述当前坐标为基准点,按照预设的查找距离定义出四个范围点,形成一查找区域。其中,每个范围点都为一个数组,分别为当前坐标的左上点left-top、当前坐标的右上点right-top、当前坐标的左下点left-bottom及当前坐标的右下点rightt-bottom;这四个点形成一查找区域,所述查找区域的形状为方形,边长为100mm。
[0169] 具体地,可以利用以下代码来分别确定四个范围点:
[0170] left-top:[lat+dlat,lng–dlng]//左上点
[0171] right-top:[lat+dlat,lng+dlng]//右上点
[0172] left-bottom:[lat–dlat,lng–dlng]//左下点
[0173] right-bottom:[lat–dlat,lng+dlng]//右下点
[0174] 当服务器将查找区域确定好之后,使用sql语句来查询该区域中是否有存在可用的wifi信息,其查询语句如下:
[0175] select*from表名where Location_lat<=left-top[0]and Location_lat<=right-top[0]and Location_lat>=left-bottom[0]and Location_lat>=right-bottom[0]and Locaton_lng<=left-top[1]and Locaton_lng<=right-top[1]and Location_lng>=left-bottom[1]and Location_lng>=right-bottom[1];
[0176] 使用上述语句即可查询到该查询范围内是否有可用wifi信息存在,如确定有可用wifi存在,则将查询到的可用wifi的ID以字符串编码的形式返回至所述客户端。
[0177] 这里,为了防止服务器在提供wifi的信息时遭到泄露,所以将wifi的ID以字符串编码的形式返回。
[0178] S3,客户端根据所述可用wifi的ID扫描所述可用wifi信息后,获取一wifi的名称及对应的ID,并将所述wifi的名称及对应的ID封装至第二请求信息中,将所述第二请求信息发送至所述服务器。
[0179] 具体地,客户端接收到可用wifi的ID后,利用wifiManager中的startScan();来扫描可用的wifi信息,其中,扫描的间隔定义为200毫秒执行一次,当扫描超过30秒则自动关闭扫描功能。
[0180] 当扫描出wifi信息后,并将该信息通过广播发送出,利用所述信息获取wifi的名称及对应的ID。并将所述wifi的名称、对应的ID及将wifi的ID字符串编码封装至第二请求信息中,将第二请求信息发送至服务器。
[0181] S4,服务器基于所述第二请求信息向所述客户端发送wifi名称和密码。
[0182] 当服务器接收到第二请求信息后,首先将返回的wifi的ID组合字符串编码进行拆分,拆分后,根据第二请求信息中的wifi名称,查询数据库中该ID字段内是否有相应wifi名称与之匹配,有则将wifi名称与密码一并返回至客户端,没有则返回空,提示客户端没有查询到该范围内的wifi,那么客户端则继续扫描可用的wifi信息。
[0183] S5,所述客户端基于所述wifi名称和密码连接所述wifi。
[0184] 当所述客户端接收到wifi名称和密码后,利用wifi名称和密码连接所述wifi,具体可以通过如下代码实现:
[0185] WifiConfiguration wifiConfig=createWifiInfo(ssid,password,type);
[0186] 在该代码中,ssid为wifi的名称,password为wifi的密码,type为连接状态,[0187] 作为可选的实施例:
[0188] 当客户端连接上所述wifi后,所述方法还包括:生成连接标记以记录当前的连接状态;当退出应用时,查询所述连接标记是否还存在wifi连接,当确定还存在wifi连接时,断开当前连接。当断开当前连接后,当客户端再次位于该区域范围内时,即使搜索到该wifi信息,也不会自动连接,只有再次发送请求才会连接,这样不但确保了wifi信号的强度,也确保了wifi信息的安全性。
[0189] 这里,当客户端再次位于该区域范围内时,即使搜索到该wifi信息,也不会自动连接的具体实现方式为:
[0190] 将type填写成WifiCipherType.WIFICIPHER_WPA。
[0191] 以上是一种wifi共享的方法的具体实施过程。基于同一发明构思,在下面的实施例,介绍一种wifi共享的系统。
[0192] 实施例四
[0193] 在本发明的实施例,介绍一种wifi共享的系统,所述系统包括:客户端及服务器;
[0194] 服务器用于接收所述第一请求信息,根据所述第一请求信息查找所述客户端当前位置所属查找区域内的wifi信息,并将查询到的可用wifi的ID返回至所述客户端。
[0195] 本发明中,所述客户端当前位置所属查找区域内的wifi信息是由N个客户端上传至所述服务器中的。具体地,当客户端在某个地方已经连接上wifi信息时,利用Android中java命令:Runtime.getRuntime().exec()来执行cat/data/misc/wifi/*.conf\n,去模拟命令行来得到具体的wifi信息;在得到该wifi信息后,通过GPS自动获取当前位置信息,在获取到当前位置的经纬度坐标后,连同wifi信息及客户端ID一起上传至服务器中。
[0196] 服务器接收客户端发送的第一请求信息之前,将N个客户端上传的wifi信息储存至预先建立的数据库的表中,这里,服务器是通过确定数据库表名及数值类型,基于所述数据库表名及所述数值类型构建数据库的表。所述数据库可以为mysql数据库;所述wifi信息包括:客户端ID、wifi名称、wifi密码及客户端当前所在的位置信息。这里,所述客户端ID是用于识别客户端所属用户身份的唯一标识,可以是用户名称,也可以是用户编号之类的,本发明中是以移动设备国际身份码IMEI为客户端ID。所述wifi的ID是指wifi的MAC地址;所述客户端当前所在的位置信息包括:位置经度及位置纬度。
[0197] 当用户通过客户端上传完wifi信息并储存成功后,服务器会向客户端返回储存成功的信息提示,用户可以根据该信息提示执行相应的操作,比如,根据该信息提示执行相应奖励申请请求,那么服务器就会根据该请求查询向对应的客户端ID,为用户发送相应的奖励。
[0198] 这里,所述数据库的表结构如表1所示:
[0199] 表1
[0200]表名 类型 描述 默认值
ID Int 数据库自增长  
User_id Char 客户端ID  
Wifi_name Char Wifi名称  
Wifi_pwd Char Wif密码  
Location_lat Long 位置经度  
Locaton_lng Long 位置纬度  
[0201] 这里,由于数据库将客户端ID设置为自增长模式,因此,数据库中每增加一个wifi信息时,就给客户端ID自动匹配一个序号。
[0202] 而当用户想通过客户端寻找免费的wifi时,先通过客户端向服务器发送第一请求信息。
[0203] 所述第一请求信息中包括:客户端当前的位置信息,所述位置信息是由客户端通过GPS数据及基站数据来确定的得到经度坐标及纬度坐标。
[0204] 这里,在客户端向服务器发送第一请求信息之前,还需用于判断是否连连接上移动网络,如果确定连接上移动网络,则会允许执行向服务器发送第一请求信息;如果没有连接上任何网络,则提示是否开启wifi或移动网络。
[0205] 并且,如果已经连接上wifi,则可以提示用户执行将wifi信息上传至服务器的操作。
[0206] 当所述服务器接收到第一请求信息后,用于将第一请求信息中的经度用$lng赋值,将纬度用$lat赋值;
[0207] 利用代码
[0208] $dlng=2*asin(sin($distance/(2*EARTH_RADIUS)))/cos(deg2rad($lat));将经度转为经度坐标;
[0209] 再利用代码$dlng=rad2deg($dlng);将经度坐标转为经度值。
[0210] 同样的,利用代码$dlat=$distance/EARTH_RADIUS;将纬度转化为纬度坐标;
[0211] 再利用代码$dlat=rad2deg($dlat);将纬度坐标转化为纬度值。其中,EARTH_RADIUS常量,该常量是地球的半径,平均值为6371000米,Distance为所需要得到客户端周围点的半径,这里我们将该值设置为100m,以能确保wifi信号的强度。
[0212] 当经度值和纬度值都确定之后,基于所述经度值及所述纬度值确定客户端的当前坐标,以所述当前坐标为基准点,按照预设的查找距离定义出四个范围点,形成一查找区域。其中,每个范围点都为一个数组,分别为当前坐标的左上点left-top、当前坐标的右上点right-top、当前坐标的左下点left-bottom及当前坐标的右下点rightt-bottom;这四个点形成一查找区域,所述查找区域的形状为方形,边长为100mm。
[0213] 具体地,可以利用以下代码来分别确定四个范围点:
[0214] left-top:[lat+dlat,lng–dlng]//左上点
[0215] right-top:[lat+dlat,lng+dlng]//右上点
[0216] left-bottom:[lat–dlat,lng–dlng]//左下点
[0217] right-bottom:[lat–dlat,lng+dlng]//右下点
[0218] 当服务器将查找区域确定好之后,使用sql语句来查询该区域中是否有存在可用的wifi信息,其查询语句如下:
[0219] select*from表名where Location_lat<=left-top[0]and Location_lat<=right-top[0]and Location_lat>=left-bottom[0]and Location_lat>=right-bottom[0]and Locaton_lng<=left-top[1]and Locaton_lng<=right-top[1]and Location_lng>=left-bottom[1]and Location_lng>=right-bottom[1];
[0220] 使用上述语句即可查询到该查询范围内是否有可用wifi信息存在,如确定有可用wifi存在,则将查询到的可用wifi的ID以字符串编码的形式返回至所述客户端。这里,为了防止服务器在提供wifi的信息时遭到泄露,所以将wifi的ID以字符串编码的形式返回。
[0221] 当所述客户端接收到可用wifi的ID以字符串编码后,用于根据所述可用wifi的ID扫描所述可用wifi信息后,获取一wifi的名称及对应的ID,并将所述wifi的名称及对应的ID封装至第二请求信息中,将所述第二请求信息发送至所述服务器;具体地,客户端接收到可用wifi的ID后,利用wifiManager中的startScan();来扫描可用的wifi信息,其中,扫描的间隔定义为200毫秒执行一次,当扫描超过30秒则自动关闭扫描功能。
[0222] 当扫描出wifi信息后,并将该信息通过广播发送出,利用所述信息获取wifi的名称及对应的ID。并将所述wifi的名称、对应的ID及将wifi的ID字符串编码封装至第二请求信息中,将第二请求信息发送至服务器。
[0223] 当所述服务器接收到第二请求信息后,基于所述第二请求信息向所述客户端发送wifi名称和密码;具体地,当服务器接收到第二请求信息后,首先将返回的wifi的ID组合字符串编码进行拆分,拆分后,根据第二请求信息中的wifi名称,查询数据库中该ID字段内是否有相应wifi名称与之匹配,有则将wifi名称与密码一并返回至客户端,没有则返回空,提示客户端没有查询到该范围内的wifi,那么客户端则继续扫描可用的wifi信息。
[0224] 当所述客户端接收到所述wifi名称和密码后,基于所述wifi名称和密码连接所述wifi。具体可以通过如下代码实现:
[0225] WifiConfiguration wifiConfig=createWifiInfo(ssid,password,type);
[0226] 在该代码中,ssid为wifi的名称,password为wifi的密码,type为连接状态,[0227] 作为可选的实施例:
[0228] 当客户端连接上所述wifi后,生成连接标记以记录当前的连接状态;当退出应用时,查询所述连接标记是否还存在wifi连接,当确定还存在wifi连接时,断开当前连接。当断开当前连接后,当客户端再次位于该区域范围内时,即使搜索到该wifi信息,也不会自动连接,只有再次发送请求才会连接,这样不但就确保了wifi信号的强度,也确保了wifi信息的安全性。
[0229] 这里,当客户端再次位于该区域范围内时,即使搜索到该wifi信息,也不会自动连接的具体实现方式为:
[0230] 将type填写成WifiCipherType.WIFICIPHER_WPA。
[0231] 实施例五
[0232] 本发明提供一种服务器,如图4所示,所述服务器包括:接收单元41、查询单元42及发送单元43;其中,
[0233] 接收单元41用于接收客户端发送的第一请求信息。
[0234] 查询单元42,用于根据所述第一请求信息查找所述客户端当前位置所属查找区域内的wifi信息,并将查询到的可用所述wifi的ID返回至所述客户端。
[0235] 本发明中,wifi信息是由不同的用户利用客户端上传至服务器中的,且一个用户对应一个客户端。具体地,当客户端在某个地方已经连接上wifi信息时,利用Android中java命令:Runtime.getRuntime().exec()来执行cat/data/misc/wifi/*.conf\n,去模拟命令行来得到具体的wifi信息;在得到该wifi信息后,通过GPS自动获取当前位置信息,在获取到当前位置的经纬度坐标后,连同wifi信息及客户端ID一起上传至服务器中。
[0236] 这里,服务器还包括:构建单元54及储存单元45;
[0237] 所述构建单元54,用于确定数据库表名及数值类型,并基于所述数据库表名及所述数值类型构建数据库的表。所述数据库可以为mysql数据库。所述储存单元45用于将wifi信息储存至数据库的表中,所述wifi信息包括:客户端ID、wifi名称、wifi密码及客户端当前所在的位置信息。这里,所述客户端ID是用于识别客户端所属用户身份的唯一标识,可以是用户名称,也可以是用户编号之类的,本发明中是以移动设备国际身份码IMEI为客户端ID。所述wifi的ID是指wifi的MAC地址;所述客户端当前所在的位置信息包括:位置经度及位置纬度。
[0238] 当用户通过客户端上传完wifi信息并储存成功后,服务器会向客户端返回储存成功的信息提示,用户可以根据该信息提示执行相应的操作,比如,根据该信息提示执行相应奖励申请请求,那么服务器就会根据该请求查询向对应的客户端ID,为用户发送相应的奖励。
[0239] 这里,所述数据库的表结构如表1所示:
[0240] 表1
[0241]表名 类型 描述 默认值
ID Int 数据库自增长  
User_id Char 客户端ID  
Wifi_name Char Wifi名称  
Wifi_pwd Char Wif密码  
Location_lat Long 位置经度  
Locaton_lng Long 位置纬度  
[0242] 这里,由于数据库将客户端ID设置为自增长模式,因此,数据库中每增加一个wifi信息时,就给客户端ID自动匹配一个序号。
[0243] 而当用户想通过客户端寻找免费的wifi时,先通过客户端向服务器发送第一请求信息。
[0244] 其中,所述第一请求信息中包括:客户端当前的位置信息,所述位置信息是由客户端通过GPS数据及基站数据来确定的得到经度坐标及纬度坐标。
[0245] 这里,在客户端向服务器发送第一请求信息之前,还需用于判断是否连连接上移动网络,如果确定连接上移动网络,则会允许执行向服务器发送第一请求信息;如果没有连接上任何网络,则提示是否开启wifi或移动网络。
[0246] 并且,如果已经连接上wifi,则可以提示用户执行将wifi信息上传至服务器的操作。
[0247] 当接收单元51接收到第一请求信息后,所述查询单元52用于将第一请求信息中的经度用$lng赋值,将纬度用$lat赋值;
[0248] 利用代码
[0249] $dlng=2*asin(sin($distance/(2*EARTH_RADIUS)))/cos(deg2rad($lat));将经度转为经度坐标;
[0250] 再利用代码$dlng=rad2deg($dlng);将经度坐标转为经度值。
[0251] 同样的,利用代码$dlat=$distance/EARTH_RADIUS;将纬度转化为纬度坐标;
[0252] 再利用代码$dlat=rad2deg($dlat);将纬度坐标转化为纬度值。其中,EARTH_RADIUS常量,该常量是地球的半径,平均值为6371000米,Distance为所需要得到客户端周围点的半径,这里我们将该值设置为100m,以能确保wifi信号的强度。
[0253] 当经度值和纬度值都确定之后,基于所述经度值及所述纬度值确定客户端的当前坐标,以所述当前坐标为基准点,按照预设的查找距离定义出四个范围点,形成一查找区域。其中,每个范围点都为一个数组,分别为当前坐标的左上点left-top、当前坐标的右上点right-top、当前坐标的左下点left-bottom及当前坐标的右下点rightt-bottom;这四个点形成一查找区域,所述查找区域的形状为方形,边长为100mm。
[0254] 具体地,可以利用以下代码来分别确定四个范围点:
[0255] left-top:[lat+dlat,lng–dlng]//左上点
[0256] right-top:[lat+dlat,lng+dlng]//右上点
[0257] left-bottom:[lat–dlat,lng–dlng]//左下点
[0258] right-bottom:[lat–dlat,lng+dlng]//右下点
[0259] 当所述查询单元52将查找区域确定好之后,使用sql语句来查询该区域中是否有存在可用的wifi信息,其查询语句如下:
[0260] select*from表名where Location_lat<=left-top[0]and Location_lat<=right-top[0]and Location_lat>=left-bottom[0]and Location_lat>=right-bottom[0]and Locaton_lng<=left-top[1]and Locaton_lng<=right-top[1]and Location_lng>=left-bottom[1]and Location_lng>=right-bottom[1];
[0261] 所述查询单元52使用上述语句即可查询到该查询范围内是否有可用wifi信息存在,如确定有可用wifi存在,则通过发送单元53将查询到的可用wifi的ID以字符串编码的形式返回至所述客户端。这里,为了防止服务器在提供wifi的信息时遭到泄露,所以将wifi的ID以字符串编码的形式返回。
[0262] 当所述客户端接收到可用wifi的ID以字符串编码后,用于根据所述可用wifi的ID扫描所述可用wifi信息后,获取一wifi的名称及对应的ID,并将所述wifi的名称及对应的ID封装至第二请求信息中,将所述第二请求信息发送至所述服务器;具体地,客户端接收到可用wifi的ID后,利用wifiManager中的startScan();来扫描可用的wifi信息,其中,扫描的间隔定义为200毫秒执行一次,当扫描超过30秒则自动关闭扫描功能。
[0263] 当扫描出wifi信息后,并将该信息通过广播发送出,利用所述信息获取wifi的名称及对应的ID。并将所述wifi的名称、对应的ID及将wifi的ID字符串编码封装至第二请求信息中,将第二请求信息发送至服务器。
[0264] 当所述接收单元51接收到第二请求信息后,所述查询单元52还用于将返回的wifi的ID组合字符串编码进行拆分,拆分后,根据第二请求信息中的wifi名称,查询数据库中该ID字段内是否有相应wifi名称与之匹配,有则通过发送单元53将wifi名称与密码一并返回至客户端,没有则通过发送单元53返回空,并提示客户端没有查询到该范围内的wifi,那么客户端则继续扫描可用的wifi信息。
[0265] 当所述客户端接收到所述wifi名称和密码后,基于所述wifi名称和密码连接所述wifi。具体可以通过如下代码实现:
[0266] WifiConfiguration wifiConfig=createWifiInfo(ssid,password,type);
[0267] 在该代码中,ssid为wifi的名称,password为wifi的密码,type为连接状态,[0268] 作为可选的实施例:
[0269] 当客户端连接上所述wifi后,生成连接标记以记录当前的连接状态;当退出应用时,查询所述连接标记是否还存在wifi连接,当确定还存在wifi连接时,断开当前连接。当断开当前连接后,当客户端再次位于该区域范围内时,即使搜索到该wifi信息,也不会自动连接,只有再次发送请求才会连接,这样不但就确保了wifi信号的强度,也确保了wifi信息的安全性。
[0270] 这里,当客户端再次位于该区域范围内时,即使搜索到该wifi信息,也不会自动连接的具体实现方式为:
[0271] 将type填写成WifiCipherType.WIFICIPHER_WPA。
[0272] 通过本发明的一个或者多个实施例,本发明具有以下有益效果或者优点:
[0273] 本发明提供一种明提供了一种wifi共享的方法及系统,所述方法包括:服务器接收客户端发送的第一请求信息,根据所述第一请求信息在数据库中查找所述客户端当前位置所属查找区域内的wifi信息,并将查询到的可用wifi的ID返回至所述客户端;所述第一请求信息中包括:所述客户端当前位置信息;这样,无论用户处于何地,只要通过客户端发送当前位置信息后,即可接收到服务器返回的可用wifi的ID;客户端接收到可用wifi的ID后,可以基于可用wifi的ID扫描所述可用wifi信息后获取一wifi的名称及对应的ID,并将该wifi的名称及对应的ID封装至第二请求信息中,将第二请求信息发送至服务器;服务器接收到所述客户端发送的第二请求信息后,可以基于wifi的名称及对应的ID,将对应的wifi名称和密码发送至客户端,那么所述客户端就可以基于所述wifi名称和密码连接所述wifi;这样,用户就就可以根据当前位置信息能随时随地地连接到免费wifi,提高了体验度且降低了使用成本。并且,当客户端断开当前wifi连接后,客户端再次位于该区域范围内时,即使搜索到该wifi信息,也不会自动连接,只有再次发送请求才会连接,这样不但确保了wifi信号的强度,也确保了wifi信息的安全性。
[0274] 以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
QQ群二维码
意见反馈