TCP通信交换数据
在ESP32与ESP32或其它局域网络内主机间传输数据时,TCP是很方便的,特别当我们连接互联网后ESPnow不能用,MQTT又不稳定发送大量的数据,同时蓝牙有其它用途时,那么学会TCP通信协议就变得十分重要。
一、什么是TCP通信?
在使用TCP前我们先了解什么是TCP:
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它是在IP(Internet Protocol,互联网协议)层之上,为应用层提供可靠的、面向连接的数据传输服务。TCP通过一系列的机制,如序列号、确认应答、超时重传、流量控制、拥塞控制等,来确保数据的可靠传输。
TCP通信的特点:
面向连接:在数据传输之前,必须先建立TCP连接,即三次握手过程。连接建立后,才能进行数据的传输。
可靠性:TCP通过确认应答、超时重传等机制,确保数据的可靠传输。如果数据在传输过程中丢失或出错,TCP会重新发送数据,直到数据被正确接收。
有序性:TCP保证数据按照发送的顺序进行传输,接收端收到的数据顺序与发送端发送的顺序一致。
流量控制:TCP通过滑动窗口机制进行流量控制,防止发送方发送数据的速率过快而导致接收方无法处理。
拥塞控制:TCP通过拥塞窗口、慢启动、拥塞避免、快速重传和快速恢复等算法,来避免网络拥塞的发生。
使用TCP通信最方便的情况:
需要可靠传输的场景:当应用层需要确保数据准确无误地传输到对方时,TCP是首选。例如,文件传输、电子邮件、网页浏览等。
对数据传输顺序有要求的场景:如果应用层需要按照特定的顺序处理接收到的数据,那么TCP的有序性特性就非常有用。
网络条件不稳定或数据传输量大的场景:TCP的流量控制和拥塞控制机制能够很好地应对网络条件不稳定或数据传输量大的情况,确保数据传输的效率和可靠性。
需要建立持久连接的场景:TCP连接一旦建立,就可以持续进行数据传输,直到连接被关闭。这种特性使得TCP非常适合需要建立持久连接的应用场景,如数据库连接、远程登录等。
总之,TCP通信因其可靠性、有序性、流量控制和拥塞控制等特性,在需要确保数据准确无误地传输到对方的场景中最为方便。然而,对于实时性要求较高或对网络延迟敏感的应用场景,可能需要考虑使用UDP(User Datagram Protocol,用户数据报协议)等其他传输层协议。
二、TCP通信的应用
为了方便的使用TCP通信功能,齐护在Mixly软件上设计了TCP图形化编程库,这样通过例程就可以很快的学习了解TCP通信的应用。
在学习TCP前我们先要了解TCP通信中的客户端各服务器端这两个概念。
TCP通信中,客户端与服务器的区别及功能如下:
客户端:主动发起连接请求的一方,负责向服务器发送数据请求并接收响应。功能包括初始化通信、发送请求、接收响应、数据处理及关闭连接。客户端使用临时的随机端口号,通过主动连接与服务器建立通信。
服务器:等待连接并提供服务的一方,监听特定端口以接收客户端的连接请求。功能包括监听端口、接受连接、处理请求、发送响应及维持连接。服务器使用已知的固定端口号,通过被动监听来等待客户端的连接请求。
两者合作实现数据的可靠传输,确保网络通信的顺利进行,他们都可以向对方发送或接收数据。
三、图形化编程
3-1 图形化编程库说明
采用图形化编程可以快捷方便,同时不用去背代码,对于应用型项目时会非常实用。
我们在齐护ESP32编程库中的wifi项下找到对应的编程块。
编程块一共有6大块:
1,TCP服务端编程块:定义端口(要与客户端保持一致),接收及发送定义及数据设置,打印IP功能可以确认服务端的IP地址。
2,TCP客户端发送(无接收功能)编程块:定义服务端的IP地址(要与定义的IP网段或路由器的相同),端口号与服务端的一样,发送的内容(字符串)。
3,TCP客户端 发送/接收:发送并接收服务器端的数据。
4,定义热点IP: 主控以热点的方式发起wifi,自定义IP、网关、子网掩码。
5,定义wifi IP:主控重新定义义一套网关及子网掩码,不跟路由器相同。
3-2 服务端接收客户端发送
连接路由器后,自定义服务端接收来自客户端的数据编程。
注:编程块内的定义要用【英文逗号】隔开,而接收块上的地址是用【英文点】隔开的,写法不一样。
服务端接收
客户端发送
3-3 服务端与客户端相互收发数据
服务器与客户端都可以相互的发送或接收数据,达到交互的目的。
服务端发送接收
客户端发送接收
四、更多资源及课程源文件下载
4-1 更多实用例程可以参考:【齐护AI对话应用案例】;
4-2 课程源文件下载:【ESP32_TCP通信】。