ESP32 TCP通信交换数据Mixly Arduino编程

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通信】。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/874298.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【开源分享】vsomeip 安装、编译、运行步骤笔记

文章目录 1. 摘要2. 安装、编译2.1 开发环境说明2.2 安装依赖2.3 获取代码2.4 编译代码2.5 安装 3. 测试验证参考 1. 摘要 本文主要描述 vsomeip 的安装、编译与运行步骤。下载源码,安装必要依赖,如Boost和CMake。通过CMake配置编译 vsomeip 库&#xf…

2024年10款好用的图纸加密软件推荐|企业图纸的守护神

在数字化时代,图纸数据的安全性是企业不可忽视的重要任务。随着技术的不断进步,图纸加密软件成为了保护企业知识产权和敏感数据的关键工具。以下是2024年推荐的10款好用的图纸加密软件,它们各具特色,能够满足不同企业的需求。 1.…

Java数组的定义及遍历

数组的声明 长度不能超过定义的长度。超过则会报错通过下标来访问 数组的遍历 最常用最简单的方法是增强for循环。

【解决bug之路】npm install node-sass(^4.14.1)连环报错解决!!!(Windows)

有关node-sass的深入分析可参考:又报gyp ERR!为什么有那么多人被node-sass 坑过? 主要有如下三方面错误,请自查: 1.node,npm版本需与node-sass版本匹配,像node-sass(^4.14.1&#x…

第三部分:4---进程地址空间

目录 数组的空间分配解析: 物理地址和虚拟地址: 虚拟地址空间: 进程地址空间的本质: 为什么要有进程地址空间? 页表对进程访问内存的检查: 进程地址空间和页表如何关联起来? 进程的独立…

保姆级离线+windows环境+私有化部署大模型

基于gis数据的高敏感高保密性要求,相信gis的小伙伴都有如下的需求:在内网,无外网环境下,部署自己的私有化大模型。 1.环境背景: 没有Linux环境,只是windows 无外网,内网环境 2.安装部署过程…

数据结构与算法1: 链表

基础知识 链表可以被想象为一系列的节点,每个节点至少有一个指针指向下一个节点,在最后一个节点,用null pointer来表示链表的结束。 链表的创建速度通常很快,在表头和表尾的插入也很快(O(1)),…

HCIA--实验十三:VLAN间通信子接口实验/双单臂路由实验

一、实验内容 1.需求/要求: 将两个单臂路由通过两台交换机连接起来,成为双臂路由,并探讨这么做的原因。实现全网通,让任何一台主机之间都可以通信。 二、实验过程 1.拓扑图: 2.步骤: 1.给PC配置ip地址…

Oceanbase Restore Point实践

官网链接:Restore Point-V3.2.4-OceanBase 数据库文档-分布式数据库使用文档 在很多应用系统中,用户需要查询数据库中的某个时间点,或者特定版本的数据来完成一些数据分析或汇总之类的操作。 OceanBase 数据库在 V2.2.7x 版本中提供了 Restor…

大学生租房平台:SpringBoot框架的设计与实现

第4章 系统设计 一个成功设计的系统在内容上必定是丰富的,在系统外观或系统功能上必定是对用户友好的。所以为了提升系统的价值,吸引更多的访问者访问系统,以及让来访用户可以花费更多时间停留在系统上,则表明该系统设计得比较专业…

5.第二阶段x86游戏实战2-认识内存

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 工具下载: 链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

分享从零开始学习网络设备配置--任务6.3 使用基本ACL限制网络访问

任务描述 某公司构建了互联互通的办公网,为保护公司内网用户数据的安全,该公司实施内网安全防范措施。公司分为经理部、财务部和销售部,分属3个不同的网段,3个部门之间用路由器进行信息传递。为了安全起见,公司领导要求…

C语言——希尔排序

希尔排序是对于插入排序的一种优化 代码&#xff1a; #include <stdio.h> #include <stdlib.h> void shell_sort(int* p, int len) { int i; int j; int step; int tmp; for (step len / 2; step > 0; step step / 2) { fo…

JavaWeb【day14】--(SpingBoot原理)

SpingBoot原理 在前面十多天的课程当中&#xff0c;我们学习的都是web开发的技术使用&#xff0c;都是面向应用层面的&#xff0c;我们学会了怎么样去用。而我们今天所要学习的是web后端开发的最后一个篇章springboot原理篇&#xff0c;主要偏向于底层原理。 我们今天的课程安…

【达梦数据库】误删数据库目录问题复现解决方式

目录 1、环境搭建1.1、查询数据库版本1.2、创建表1.3、插入数据1.4、查询数据 2、故障重演2.1、服务器内直接删除整个库文件2.2、查询数据&#xff1a;数据可查2.3、查看进程&#xff1a;进程存在2.4、查看proc进程文件&#xff1a;deleted 3、数据恢复3.1、逻辑导出导入-(数据…

算法练习题17——leetcode54螺旋矩阵

题目描述 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 代码 import java.util.*;class Solution {public List<Integer> spiralOrder(int[][] matrix) {// 用于存储螺旋顺序遍历的结果List<Integer>…

【数据结构-二维前缀和】力扣221. 最大正方形

在一个由 ‘0’ 和 ‘1’ 组成的二维矩阵内&#xff0c;找到只包含 ‘1’ 的最大正方形&#xff0c;并返回其面积。 示例 1&#xff1a; 输入&#xff1a;matrix [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”],[“1”…

【Qt 即时通讯项目】登录验证码是如何做到的呢

文章目录 1. 登录注册功能验证码实现2. 验证码生成的流程3. 细节部分 1. 登录注册功能验证码实现 &#x1f427;①目的&#xff1a;引入验证码&#xff0c;目的是用来避免程序被其它程序暴力破解的方式找到密码。 2. 验证码生成的流程 ①&#x1f34e;首先通过Qt的QRandomGen…

智能优化算法-樽海鞘优化算法(SSA)(附源码)

目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1.内容介绍 樽海鞘优化算法 (Salp Swarm Algorithm, SSA) 虽然名称中提到的是“樽海鞘”&#xff0c;但实际上这个算法是基于群体智能的一种元启发式优化算法&#xff0c;它模拟了樽海鞘&#xff08;Salps&#xff09;在海…

SOLIDWORKS Electrical用户权限管理

SOLIDWORKS Electrical 可以自定义用户权限管理&#xff0c;用户权限设置可设置不同的用户(工程师)针对其在软件中查看和修改的内容。如&#xff1a;A用户的权限只能查看预览某些项目文件无法修改内容&#xff0c;B用户可以查看某个文件夹的内容并可以更改;都可以通过用户权限来…