当前位置: 首页 > news >正文

wordpress 插件作用/seo推广顾问

wordpress 插件作用,seo推广顾问,代理公司是干什么的,山西网站开发深入理解android Wi-Fi模块学习总结——WifiService2018年01月16日 23:06:20阅读数:341除了看源码外,我结合博文和书籍一起理解,这里推荐几篇博文和一本书:http://blog.csdn.net/u013467735/article/details/42487537http://blog.…

深入理解android Wi-Fi模块学习总结——WifiService

除了看源码外,我结合博文和书籍一起理解,这里推荐几篇博文和一本书:

http://blog.csdn.net/u013467735/article/details/42487537

http://blog.csdn.net/u013467735/article/details/42493665

http://blog.csdn.net/u013467735/article/details/42525387

http://blog.csdn.net/eastmoon502136/article/details/8721510

书籍是邓凡平的深入理解Android(Wi-Fi、NFC和GPS卷)

这篇博文也引用了以上资料中的一些表述,引用之处没有一一指出,请原作者谅解。


一,WiFi状态机

在总结 WifiService的知识之前,先大概看看WiFi状态机的状态和属性,如下:

                         WifiStateMachine中的状态及层次关系

(初始状态是:InitialState)



二,wifi的启动

Wifi的启动主要是通过用户点击wifi开关,调用setWifiEnabled后,再经过一系列的向下调用,最终加载驱动、连接WPAS,以此作为开启阶段的结束。具体的调用流程如下图:


对以上流程做出以下总结:

(1)用户打开wifi开关后,调用mWifiManage.setWifiEnabled(true)函数,通过AIDL调用WifiService的setWifiEnabled(true),该函数通过mWifiController发送CMD_WIFI_TOGGLED的消息,由WifiController的StaEnabledState状态处理,处理方法是调用WifiStateMachine的setSupplicantRunning(true) 方法,该方法将发送CMD_START_SUPPLICANT消息,此时WifiStateMachine是InitialState状态。

(2)InitialState处理CMD_START_SUPPLICANT消息,主要做了以下三件事情:

调用WifiNative的loadDriver()加载驱动;

调用NwService的wifiFirmwareReload(mInterfaceName,"STA")加载固件;

调用WifiNative的startSupplicant(mP2pSupported)启动wpa_supplicant。

(3)WifiStateMachine进入SupplicantStartingState状态,若SUP启动成功,WifiMonitor发送SUP_CONNECTION_EVENT给WifiStateMachine

(4)SupplicantStartingState处理SUP_CONNECTION_EVENT消息,转到DriverStartedState状态,其EA进行一些设置后进入DisconnectedState状态,开启流程到此结束。


三、Wifi的扫描

当wifi开启之后,会发送WIFI_STATE_CHANGED_ACTION广播,WifiTracker注册监听该广播,收到该广播后,调用mScanner.resume()启动扫描,该方法中调用mWifiManage.startScan()发起扫描。再通过WifiService的startScan( )触发WifiStateMachine的startScan()方法,下面就从WifiStateMachine的startScan()方法开始分析流程,如下图:

Wifi扫描的流程比较简单,涉及的状态也不多,没发生状态切换,停留在DisconnectedState状态,主要在于WifiNative向WPAS发送SCAN命令,当WPAS找到AP后,通过WifiMonitor向WifiStateMachine发送SCAN_RESULTS_EVENT消息,WifiStateMachine再去取扫描的结果进行保存,并发送SCAN_RESULTS_AVAILABLE_ACTION广播通知上层。


 

三、Wifi的连接

从WifiManager的connect函数开始,该函数通过AsyncChannel向WifiService发送CONNECT_NETWORK消息,WifiService将其装法给WifiStateMachine。下面从WifiStateMachine开始分析连接wifi的大致流程。


连接流程比较复杂,做出以下总结:

(1)整个流程起源于WifiManager向WifistateMachine发送的CONNECT_NETWORK消息。

(2)当前状态 仍然是DisconnectedState,其父状态ConnectModeState处理CONNECT_NETWORK消息,它将发送一系列命令给WPAS,WPAS将完成802.11规范中定义的身份认证、关联、四次握手等工作。

(3)当WPAS连接上AP之后,将通过WifiMonitor发送NETWORK_CONNECTION_EVENT消息给WifistateMachine。依然是DisconnectedState的父状态ConnectModeState处理该消息。然后跳转到ObtainingIpState状态,并发送广播NETWORK_STATE_CHANGED_ACTION通知上层。

(4)ObtainingIpState状态主要完成DHCP协议的IP地址申请,主要是CMD_PRE_DHCP_ACTIONCMD_POST_DHCP_ACTION消息的处理,最后将进入ConnectedState状态,连接流程结束。


四、申请IP地址

当WPAS连接上AP之后,将进行IP地址的动态申请,使用的协议是DHCP协议,该协议的介绍可以参考文档《计算机网络基础知识与常用网络协议总结》中的“三、应用层常用协议2.动态主机配置协议(DHCP)”

Android中主要使用到的类是DHCPClient,它是一个StateMachine,共有14个状态,如下:


对应IP地址申请的流程,从上文提到的WifistateMachine进入ObtainingIpState状态开始分析,大致有以下几个过程:

(1)IpManager发送CMD_START_DHCP消息给DHCPClient,此时DHCPClient处于初始状态StoppedState,处理该消息时转入WaitBeforeStartState状态;

(2)并向IpManager发送CMD_PRE_DHCP_ACTION消息,IpManager又给DHCPClient回复CMD_PRE_DHCP_ACTION_COMPLETE消息。然后DHCPClient转入DhcpInitState状态。

(3)DhcpInitState通过sendDiscoverPacket()广播DHCPDISCOVER报文。ReceiveThread线程不断监听收到的消息,收到消息时发送CMD_RECEIVED_PACKET消息,若收到的报文是一个DhcpOfferPacket,则转入DhcpRequestingState。

(4)进入状态后,将通过sendRequestPacket发送DHCPREQUEST报文给服务器。等待服务器回复DHCPACK报文,若收到的报文是DhcpAckPacket类型的,则通过setDhcpLeaseExpiry(packet)设置租期时间,并发送CMD_POST_DHCP_ACTION消息给IpManager,之后转入ConfiguringInterfaceState状态。改状态将向IpManager发送CMD_CONFIGURE_LINKADDRESS消息。

(5)IpManager收到CMD_POST_DHCP_ACTION消息将通过回调onPostDhcpAction()和onNewDhcpResults()和onProvisioningSuccess通知WifistateMachine做进一步处理。

(6)IpManager收到CMD_CONFIGURE_LINKADDRESS消息时,将通过setIPv4Address设置IP地址,并回复消息EVENT_LINKADDRESS_CONFIGURED 给DHCPClient。

(7)DHCPClient收到EVENT_LINKADDRESS_CONFIGURED消息后将转到DhcpBoundState状态。该状态的EA将通过scheduleLeaseTimers()进行租用时间的计时器设置。

(8)当计时器设置的时间一到(租期的一半),需要向服务器续租该IP地址,将发送CMD_RENEW_DHCP消息,DhcpBoundState处理该消息,转入WaitBeforeRenewalState状态,又重新开始了(2)的步骤。

 

 



版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Mr_55/article/details/79080210
个人分类: android
http://www.jmfq.cn/news/5259619.html

相关文章:

  • 免费做外贸的网站平台有哪些/网络营销现状分析
  • 中文.com网站/河南网站关键词优化代理
  • 网页设计在邯郸能干什么/优化营商环境 助推高质量发展
  • web网站开发需要什么/2345网址导航浏览器
  • 网站的按钮怎么做/自建站模板
  • wordpress搜索引擎显示/seo建站教学
  • 漯河网站制作/有什么引流客源的软件
  • 上海工商网查询/seo技术有哪些
  • 苏州建设公司有哪些/上海推广seo
  • 公司如何做网站宣传/个人博客网站设计毕业论文
  • 企业网站建设方案书范文/网站关键词排名优化方法
  • 包头网站建设价格/seo国外英文论坛
  • 织梦网站导入链接怎么做/专业seo培训
  • 百度收录自适应网站/网推拉新app推广接单平台
  • 深圳门户网站建设/网络工具
  • 淘宝客如何建设自己的网站/网站优化最为重要的内容是
  • 毕业设计做网站想法/百度浏览器网址链接
  • 建设网站模块需要哪些/前端seo主要优化哪些
  • 创建一个网站的项目体现项目完成速度因素的/技术培训学校机构
  • 北京住房和城乡建设部官方网站/哪个浏览器不屏蔽网站
  • 睿达科网络 网站建设/关键词seo价格
  • 怎样接做网站的活/青岛seo网站关键词优化
  • 用 可以做网站软件吗/seo网站怎么搭建
  • 郏县网站制作公司/app开发公司
  • 营销型网站如何策划/网络营销是什么课程
  • 网站免费正能量软件/百度推广费2800元每年都有吗
  • wordpress 做仿站/项目营销推广策划
  • 简述电子商务网站的内容设计与开发/子域名大全查询
  • 深圳市公司网站建设平台/无锡seo公司哪家好
  • 网站制作换下面友情连接/爱站网备案查询