Air724UG CSDK socket连接前的准备

![](http://openluat-luatcommunity.oss-cn-hangzhou.aliyuncs.com/images/20200815112907421_Air724UG CSDK网络连接流程.png)

一、通信前的准备

1.1,初始化网络跟踪

用来设置网络状态主动上报,设置后当网络发生变更会主动上报状态,这样就可以及时获取当前网络状态了。
AT+CREG=2

1.2,等待网络注册成功

网络注册成功表示模块成功注册到2G或者4G网络,对于2G网络来说还存在CS域的注册和PS域的分别注册,而4G网络因为没有CS域,所以注册成功就表示PS域可用了。而真正使用socket建立连接又要等PS域注册成功后才能正常使用。所以为了简化这个流程,我们只需要判断主动上报信息中包含如下信息中的其中一个,就认为网络注册成功

1.3,判断是否为4G网络

4G网络因为所有的交互都是基于数据域的,所以网络注册成功后,核心网默认会分配一个承载(默认PDP),这个承载就可以直接用来进行socket通信。如果注册的是2G网络,那就需要向网络发起建立PDP承载的请求,再由网络分配PDP链路来进行socket通信。判断是否为4G网络,可以通过2,等待网络注册成功中的主动上报来判断,也可以通过AT+CREG?指令来查询当前注册的网络

1
2
3
AT+CREG?
+CREG: <n>,<stat>[,<lac>,<ci>,<act>]
OK

act值为7的时候表示的是4G网络,0/1/3表示的是2G网络。

1.4,等待PDP激活

承载激活成功后会主动上报*CGEV: ACT开头的URC信息

1
*CGEV: ACT,<cid>,<apn>,<ip>

1.5,获取激活PDP的IP地址

PDP激活后,可以根据*CGEV的上报来获取IP地址,也可以通过AT+CGDCONT?指令查询IP地址

1
2
3
4
5
6
AT+CGDCONT?

+CGDCONT: <cid>,<PDP_type>,<APN>,<PDP_addr>,
<d_comp>,<h_comp>
OK

其中PDP_addr字段表示的是当前IP地址

1.6,绑定IP地址

调用socket接口中的bind接口来绑定当前PDP的IP地址,来进行socket通信

1.7,建立socket连接

这步就不去赘述了,不是本文的重点。

二、被动掉网问题

在处理掉网问题之前首先要搞清楚掉网这个概念,掉网其实对于模块来说分好几种情况:

2.1,断网

断网后,模块会尝试自动恢复,如果长时间未能恢复可以尝试重启设备或者进出飞行模式来恢复。

2.2,PDP去激活

pdp去激活,一般是由核心网主动发起的,可能是因为网络繁忙或者2G网络下长时间未进行数据通信。这种情况下,要想恢复,需要区分当前的网络是4G网还是2G网:

上次更新 2021-01-28