FTP[GW]文件下载流程
步骤一:调用指令 at$mynetcon 设置网络初始化参数,设置 channel ID 和 APN
步骤二:调用指令 at$mynetact 激活步骤一设置的网络
步骤三:调用指令 at$myftpopen,ftp 会创建两条通路,一条是命令通道(control socket),一条是数据通路
(data socket),open 时创建的是命令通道,该 AT 指令 open ftp 时调用函数 app_ftp_connect_server
如下:
app_ftp_connect_server
apptcpip_soc_create
apptcpip_soc_select_event
apptcpip_soc_connect
socket 连接 OK 后,server 与模块会有信令交互,通过注册的回调函数(apptcpip_soc_callback_func
)通知 server 状态,模块通过选择函数 app_ftp_ctrl_soc_notify 做出回应,此过程通过 control_socket 交互,
如下:
server
Server
MO
Send code 220 notify MO that server ready ok
Send ”user name”
Send code 331 notify MO that “user name ”is OK,but
need password
Send ”password”
Send code 230 notify MO that user logged
至此,步骤三 open success。
步骤四:调用指令 at$myftpget 获取文件,模块收到指令后会调用 process_ftp_get 函数发送 TYPE 设置文件
传输类型,其与 server 交互流程,其通知方式和和回应仍然通过回调函数 apptcpip_soc_callback_func 和选
择函数 app_ftp_ctrl_soc_notify,此过程通过 control_socket 交互,如下:
server
Server
MO
Send “TYPE”
Send code 200 indicate TYPE set okay
Send “PASV”
Send code 227 notify that enter passsive mode
模块收到代码 227 后调用函数 app_ftp_init_passive_data_con 初始化被动数据连接,该函数与 open 网络
时 app_ftp_connect_server 函数类似,创建 data socket ,注册回调函数 apptcpip_soc_callback_func,注册事
件通知选择函数 app_ftp_socket_cb_fcn,连接 server 的 data 通道,三次握手之后,data socket connect okay。
模块与 server 建立 socket 连接后,server 在 data 通道会下发一个 CONNECT event,模块进入透传模式
并发送”CONNECT”到串口,其与 server 交互如下:
server
Server
MO
Send “CONNECT” event by data channel
Send ” REST”,set file offset by control channel
Send code 350(need more information) by control
channel
Send ” RETR” and file name by control channel
Send file data by data channel
Send close event by data channel
Send code 226 indicate file transfer complete
模块收到代码 226 后,退出透传模式,文件下载结束。