7 TCP 协议实现
7.1 数据结构

7.1.1 存放接收数据的数组
uint8_t gTcp_RxBuf[TCP_CHANNEL_NUM][TCP_RXBUF_MAXLEN];
7.1.2 tcp client 的连接状态数组
uint8_t Tcp_State[TCP_CHANNEL_NUM] = {OFF_LINE};
7.1.3 每个连接的邮箱
static OS_EVENT *Tcp_Mbox[TCP_CHANNEL_NUM];
7.1.4 环形缓冲区
static struct ringbuffer tcp_rx_ringbuffer[TCP_CHANNEL_NUM];
7.2 TCP 协议API接口函数实现
7.2.1 设计目标和原则
模块化,本模块仅提供tcp协议API接口函数。

7.2.2 tcp_init()
tcp协议初始化。
7.2.3 tcp_client_open()
建立与远程主机的tcp客户端连接。
7.2.4 tcp_client_close()
关闭与远程主机的tcp客户端连接。
7.2.5 tcp_client_write()
tcp客户端发送数据。
7.2.6 tcp_client_read()
tcp客户端接收数据
7.2.7 tcp_msg_post()
将tcp客户端数据发送到驱动层。
7.2.8 tcp_driver_copy()
从驱动层拷贝数据到tcp客户端
7.3 TCP 协议AT命令实现
为了协议的可扩展性,不在4g_core.c 中添加代码了,添加两个文件4g_tcp.h 和4g_tcp.c。
类似的,将来扩充mqtt协议的话,只需要添加4g_mqtt.h 和 4g_mqtt.c。
7.3.1 4g_tcp.h


7.3.2 4g_tcp.c

7.3.3 4g_core.c修改
7.3.3.1 PTL_COM1_RxPROC()函数


7.4 案例--TCP Task 任务

7.4.1 建立连接
res = tcp_client_open(1,"101.200.0.74",18935,TCP_IPV4);
阻塞,超时60秒。可能的失败原因,网络不可用。
7.4.2 读取数据
res_len = tcp_client_read(1,data,sizeof(data));
无阻塞读取,网络断了,返回-1; 没有数据,返回0; 大于0的数据表示实际读取到的数据长度。
7.4.3 发送数据
tcp_client_write(1,data,res_len);
将接收到的数据,原文回传给远程主机。
7.4.4 断线重连
