今天,来分享下TCP-UART透传示例,源码开放,可根据实际需求灵活应用。
一、TCP协议概述
TCP(Transmission Control Protocol,传输控制协议)——是一种面向连接的、可靠的、基于字节流的传输层通信协议。它主要用于在不可靠的网络环境中提供稳定的数据传输服务,确保数据能够按照顺序、无错误地到达接收端。
TCP通过三次握手建立连接,使用滑动窗口进行流量控制,以及通过校验和确认应答、超时重传等机制来保证数据的可靠性。它是互联网协议套件(TCP/IP协议族)的核心组成部分,广泛应用于各种网络应用中。
▼ TCP工作原理 ▼
连接建立:
TCP协议使用三次握手协议来建立连接。
客户端发送一个SYN(同步序列编号)报文给服务端,并携带一个随机生成的初始序列号。
服务端收到SYN报文后,发送一个SYN+ACK(同步序列编号 + 确认应答)报文给客户端,表示确认收到了客户端的SYN报文,并携带自己的初始序列号。
客户端收到服务端的SYN+ACK 报文后,发送一个ACK(确认应答)报文给服务端,表示确认收到了服务端的SYN+ACK报文。至此,TCP连接建立完成。
数据传输:
在连接建立后,双方就可以开始传输数据了。TCP协议会将应用层发送的数据分割成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传输单元MTU的限制),并为每个报文段分配一个序号。
接收端在收到报文段后,会按照序号进行排序,并发送确认应答(ACK)给发送端。如果发送端在合理的往返时延(RTT)内未收到确认应答,则会重传对应的报文段。
连接释放:
TCP协议使用四次挥手协议来终止连接。
客户端发送一个FIN(结束)报文给服务端,表示自己想要关闭连接。
服务端收到FIN报文后,发送一个ACK报文给客户端,表示确认收到了客户端的FIN报文。此时,客户端到服务端的连接关闭,但服务端到客户端的连接仍然打开。
服务端在发送完所有剩余数据后,也发送一个FIN报文给客户端,表示自己也想要关闭连接。
客户端收到服务端的FIN报文后,发送一个ACK报文给服务端,表示确认收到了服务端的FIN报文。至此,TCP连接完全关闭。
二、TCP-UART透传示例
本小节教你使用LuatOS脚本语言,让Air201模组连接上一个TCP服务器,并且实现模组和服务器之间数据的双向传输。
https://docs.openluat.com/air201/luatos/app/socket/tcp/
2.1 本教程实现的功能定义:
通过网页端启动一个TCP服务器;
Air201模组插卡开机后,连接上TCP服务器;
Air201模组向TCP服务器发送:TCP CONNECT,服务器可以收到数据并且在网页端显示;
TCP服务器网页端向Air201模组发送:data from TCP server,Air201模组可以收到数据并且通过串口输出显示。
2.2 核心脚本代码详解
2.2.1 串口初始化
本文示例:串口使用MAIN_UART(uart1)。
2.2.2 数据接收回调:搭建响应桥梁
这里使用uart.rx接口,和以zbuff的方式存储从uart1外部串口收到的数据--收取数据会触发回调。
注意:这里的"receive"是固定值不要修改。
2.2.3 TCP网络配置:铺就数据通道
2.2.4 TCP至串口透传:数据无缝流转
2.2.5 串口至TCP反透传:信息双向传递
2.3 完整代码及运行结果
2.3.1 完整代码
2.3.2 运行结果
使用TCP/UDP web测试工具及SSCOM串口工具,运行结果如下图所示:
今天的内容就分享到这里了~
审核编辑 黄宇
-
TCP
+关注
关注
8文章
1357浏览量
79107 -
uart
+关注
关注
22文章
1237浏览量
101441 -
源码开放
+关注
关注
0文章
2浏览量
5170
发布评论请先 登录
相关推荐
评论