【嵌入式学习3】TCP服务器客户端 - UDP发送端接收端
目录
1、TCP
TCP特点
TCP三次握手(建立TCP连接):
TCP四次握手【TCP断开链接的时候需要经过4次确认】:
TCP网络程序开发流程
客户端开发:用户设备上的程序
服务器开发:服务器设备上的程序
2、UDP
为什么使用UDP?
UDP常用再哪些方面?
UDP特点
UDP接收和发送流程
UDP实现步骤
TCP和UPD对比
1、TCP
- 数据不能随便发送,在发送之前还需要选择一个对应的传输协议,保证程序之间按照指定的传输规则进行数据的通信
- TCP (Transmission Control Protocol)简称传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP通信需要经过创建连接、数据传送、终止连接三个步骤
TCP特点
- 面向连接:通信双方必须先建立连接才能进行数据的传输,完成数据交换后,双方必须断开此连接,以释放系统资源。这种连接是一对一的,因此TCP不适用于广播的应用程序,基于广播的应用程序请使用UDP协议
- 可靠传输:
- TCP采用发送应答机制:TCP发送的每个报文段都必须得到接收方的应答才认为这个TCP报文段传输成功
- 超时重传:发送端发出一个报文段之后就启动定时器,如果在定时时间内没有收到应答就重新发送这个报文段。
- 错误校验:TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。
- 流量控制和阻塞管理:流量控制用来避免主机发送得过快而使接收方来不及完全收下。
TCP三次握手(建立TCP连接):
建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。
①第一次握手:客户端将数据包发送给服务端,等待服务端确认【SYN=1,seq=J】
②第二次握手:服务端收到客户端的连接请求,发送数据包给客户端确认连接请求【SYN=1,ACK=1,ack=J+1,seq=K】
③第三次握手:客户端收到确认,将数据包发送给服务端,服务端检查数据包正确连接后开始传输数据【ACK=1,ack=K+1】
TCP四次握手【TCP断开链接的时候需要经过4次确认】:
①主机1向主机2发起FIN报文后进入FIN_WAIT_1状态【FIN=1,seq=u】
②主机2收到FIN报文,向主机1回ASK报文确认此时可以关闭连接【ACK=1,seq=v,ack=u+1】
③主机2向主机1发送FIN报文,请求关闭同时主机2进入CLOSE_WAIT状态【FIN=1,ACK=1,seq=w,ack=u+1】
④主机1收到主机2FIN报文,向主机2发送ASK报文,主机2收到后关闭连接【ACK=1,seq=u+1,ack=w+1】
此时,主机1等待2MSL(Maximum Segment Lifetime 报文最大生存时间)后依然没有收到回复,则证明Server端已正常关闭,主机1也可以关闭连接。
TCP网络程序开发流程
客户端开发:用户设备上的程序
- 创建客户端套接字对象
- 和服务端套接字建立连接
- 发送数据
- 接收数据
- 关闭客户端套接字
服务器开发:服务器设备上的程序
- 创建服务端端套接字对象
- 绑定端口号
- 设置监听
- 等待接受客户端的连接请求
- 接收数据
- 发送数据
- 关闭套接字
2、UDP
- 无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。
- 发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据
为什么使用UDP?
使用UDP协议消耗资源小,通信效率高,所以通常都会用于音频、视频和普通数据的传输例如视频会议都使用UDP协议,因为这种情况偶尔丢失一两个数据包,也不会对接收结果产生太大影响。
UDP常用再哪些方面?
- 包总量较少的通信(DNS).
- 视频、音频等多媒体通信(即时通信).
- 限定于 LAN 等特定网络中的应用通信.
- 广播通信(广播、多播)
UDP特点
- 需要资源少
- 不保证接收
- 无连接
- 快
UDP接收和发送流程
UDP实现步骤
- 导入模块socket
- 创建socket套接字
- 绑定IP&端口(可选)
- 发送数据
- 关闭套接字
TCP和UPD对比
UDP | TCP |
面向无连接 | 有连接 |
支持一对一、一对多、多对一、多对多 | 两个端点的一对一通信 |
不保证数据传输的可靠性 | 传输数据无差错、不丢失、不重复、按时序到达 |
占用资源少 | 占用资源多 |
相关文章:
【嵌入式学习3】TCP服务器客户端 - UDP发送端接收端
目录 1、TCP TCP特点 TCP三次握手(建立TCP连接): TCP四次握手【TCP断开链接的时候需要经过4次确认】: TCP网络程序开发流程 客户端开发:用户设备上的程序 服务器开发:服务器设备上的程序 2、UDP 为…...
《Spring Cloud Eureka 高可用集群实战:从零构建高可靠性的微服务注册中心》
从零构建高可用 Eureka 集群 | Spring Cloud 微服务架构深度实践指南 本文核心内容基于《Spring Cloud 微服务架构开发》第1版整理,结合生产级实践经验优化 实验环境:IntelliJ IDEA 2024 | JDK 1.8| Spring Boot 2.1.7.RELEASE | Spring Cloud Greenwich…...
Dust3r、Mast3r、Fast3r
目录 一.Dust3r 1.简述 2.PointMap与ConfidenceMap 3.模型结构 4.损失函数 5.全局对齐 二.Mast3r 1.简述 2.MASt3R matching 3.MASt3R sfm 匹配与标准点图 BA优化 三.Fast3r 1.简述 2.模型结构 3.损失函数 三维重建是计算机视觉中的一个高层任务,包…...
HTML5 Web SQL 数据库学习笔记
HTML5 的 Web SQL 数据库曾是一种用于在浏览器客户端存储数据的技术,但目前已被废弃。尽管如此,了解其基本概念和操作方法仍具有一定的学习价值。以下是关于 Web SQL 数据库的学习笔记。 一、Web SQL 数据库概述 1.1 状态与替代方案 Web SQL API 已被…...
Plastiform复制胶泥:高精度表面复制与测量的高效工具
在工业制造和质量检测领域,表面复制和测量是确保产品质量的关键环节。Plastiform复制胶泥作为一种创新材料,凭借其出色的性能和多样化的应用,为用户提供了可靠的解决方案。它能够快速捕捉复杂表面的细节,确保测量结果的准确性&…...
安装 `torch-sparse` 和 `torch-cluster`
✅ 安装 torch-sparse 和 torch-cluster 请直接运行下面这条 一行命令 来装 PyG 剩余依赖(适配我已装好的 PyTorch 2.5.1cpu): pip install torch-sparse torch-cluster -f https://data.pyg.org/whl/torch-2.5.1cpu.html✅ 或者自己去官网…...
Linux之基础知识
目录 一、环境准备 1.1、常规登录 1.2、免密登录 二、Linux基本指令 2.1、ls命令 2.2、pwd命令 2.3、cd命令 2.4、touch命令 2.5、mkdir命令 2.6、rmdir和rm命令 2.7man命令 2.8、cp命令 2.9、mv命令 2.10、cat命令 2.11、echo命令 2.11.1、Ctrl r 快捷键 2…...
[mlr3] Bootstrap与交叉验证k-fold cross validation
五折交叉验证因其无放回分层抽样和重复验证机制,成为超参数调优的首选; 而Bootstrap因有放回抽样的重复性和验证集的不稳定性,主要服务于参数估计(置信区间的计算)而非调优。 实际应用中,可结合两者优势&am…...
自动化构建攻略:Jenkins + Gitee 实现 Spring Boot 项目自动化构建
Jenkins Gitee 实现 Spring Boot 项目自动化构建 环境准备安装配置jdk安装配置maven安装git安装配置Jenkins 测试构建测试自动化触发 环境准备 云服务器环境: 系统版本:Ubuntu 24.04 64位ecs规格:4核(vCPU)8 GiB公网带宽:10Mbi…...
Python 中的不可变数据类型的解析
# Python 中的不可变数据类型的解析 在 Python 的世界里,数据类型扮演着至关重要的角色。根据数据是否可以在创建后被修改,Python 数据类型可分为可变和不可变两类。本文将聚焦于不可变数据类型,详细介绍它们的特点,并结合具体实例…...
【Kafka】分布式消息队列的核心奥秘
文章目录 一、Kafka 的基石概念主题(Topic)分区(Partition)生产者(Producer)消费者(Consumer) 二、Kafka 的架构探秘Broker 集群副本机制 三、Kafka 的卓越特性高…...
基于Promise链式调用的多层级请求性能优化
代码优化-循环嵌套关联请求 1. 背景 在实际开发中,我们经常会遇到需要嵌套关联请求的场景,比如: 获取项目列表获取项目详情获取项目进度 2. 问题 在这种场景下,我们可能会遇到以下问题: 串行请求瀑布流ÿ…...
RuoYi基础学习
1 若依搭建 前后端分离版本:RuoYi-Vue利用SpringBoot作为后端开发框架,与Vue.js结合,实现了前后端分离的开发模式。这种架构有助于提高开发效率,前后端可以独立开发和部署,更适合现代化的Web应用开发。 RuoYi-Vue3&a…...
解决关于原生gmssl无法直接输出sm2私钥明文的问题
解决关于原生gmssl无法直接输出sm2私钥明文的问题 问题描述解决方法解决方法一解决方法二 问题描述 通过gmssl生成sm2公私钥对时,输出的是加密的sm2私钥,无法获取到SM2私钥明文。 解决方法 解决方法一 手动解密: 解决方法二 修改源码&…...
AT24Cxx移植第三方库到裸机中使用
简介 MCU : STM32F103C8T6 库: HAL库裸机开发 EEPROM : AT24C02, 256Byte容量,I2C接口 电路图 AT24C02 电路图 电路图引用 逻辑直接读写 // 写入数据到 EEPROM HAL_StatusTypeDef EEPROM_WriteByte(uint16_t MemAddress, uint8_t Data) {// 发送数据uint8_t …...
【落羽的落羽 C++】内存区域、C++的内存管理
文章目录 一、内存区域二、C的内存管理1. new和delete2. new和delete的特点3. 实现的原理 一、内存区域 C语言和C中,我们常把计算机的内存分为不同的区域,有各自不同的功能: 栈区:存放函数的局部变量、参数、返回地址等。堆区&a…...
星际旅行(去年蓝桥杯省赛b组-第7题)
题目链接: 蓝桥账户中心 朋友分享给我一道题,我刚开始其实先用dfs写,但是直接就超时了(很大的一部分原因是截图中没有数据范围) #include<bits/stdc.h> using namespace std; const int MAXN 1e97; vector<int> graph[MAXN]; bool visite…...
转发和重定向的区别详解
转发(Forward)和重定向(Redirect)是 Web 开发中两种常用的请求处理方式,主要用于将客户端请求从一个资源转移到另一个资源。它们在实现机制、行为表现和应用场景上有显著区别,以下是对两者的详细解析&#…...
HarmonyOS NEXT——【鸿蒙相册图片以及文件上传Picker封装】
1、鸿蒙系统文件/图片上传base64: 鸿蒙应用需要上传图片或者文件时,由于更高的安全性与更严谨的访问权限,通常无法直接从系统相册或文件管理中直接上传,因此我们可以通过picker对象去拉起相册访问的能力,引导用户选择…...
Java中文件copy的5种方式
Java中文件copy的5种方式 传统字节流缓冲流jdk7 Files.copy通道(零拷贝)内存映射对比 传统字节流 缓冲流 jdk7 Files.copy 通道(零拷贝) 内存映射 对比...
Nacos Client 模块的作用是什么?是如何与 Server 端通信的?
Nacos Client 模块是 Nacos 架构中的重要组成部分,它负责与 Nacos Server 端进行交互,实现服务注册、服务发现、配置管理等核心功能。 可以将 Nacos Client 理解为 Nacos 提供给应用程序使用的 SDK。 Nacos Client 模块的主要作用: 服务注册 (Service R…...
c中的变量命名规则
在 C 中,变量命名需要遵循一定的规则和约定,以确保代码的可读性和合法性。以下是 C 变量命名的详细规则: 1. 基本规则 字母开头:变量名必须以字母(a-z 或 A-Z)或下划线(_)开头&…...
DDR(Double Data Rate)详解
一、DDR的定义与核心特性 DDR(双倍数据率同步动态随机存取存储器) 是一种 基于时钟上升沿和下降沿传输数据的高速内存技术,广泛应用于计算机、嵌入式系统、移动设备等领域。其核心特性包括: 双倍数据率:每个时钟周期传…...
aocache:AOCache 新增功能深度解析:从性能监控到灵活配置的全方位升级
最近对aocache 进行了重要升级,最新版本0.6.0增加了几项新功能:性能分析日志,AOCache性能分析工具,切入点自定义配置,全局配置,本文详细说明这几项目新功能的作用和使用方式。 一、性能分析日志 需求背景…...
IsaacLab最新2025教程(7)-引入IK solver控制机器人
机器人控制可以直接给定关节角进行驱动实现功能,完成任务,但是关节角不是很直观而且做teleoperation或者是结合VLA模型时候,用eef pose会更符合直觉一些,isaacsim用的是LulaKinematics,因为IsaacLab现在是ETHZ的团队在…...
【测试】每日3道面试题 3/30
每日更新,建议关注收藏点赞。 白盒测试逻辑覆盖标准?哪种覆盖标准覆盖率最高? 5种。语句覆盖、分支/判定覆盖、条件覆盖、条件组合覆盖【覆盖率最高,所有可能条件组合都验证】、路径覆盖【理论上最高,但实际很难实现】…...
矩阵中对角线的遍历问题【C++】
1,按对角线进行矩阵排序 题目链接:3446. 按对角线进行矩阵排序 - 力扣(LeetCode) 【题目描述】 对于一个m*n的矩阵grid,要求对该矩阵进行 变换,使得变换后的矩阵满足: 主对角线右上的所有对角…...
自动化与智能化的认知差异
从认知心理学的角度对自动化和智能化进行了区分,我们可以从同化、顺应、平衡、图式方面来理解:一、自动化与图式及同化(1)图式是认知心理学中的一个重要概念,指个体对世界的知觉经验和理解方式,是个体过去经…...
leetcode 2360 图中最长的环 题解
题面 给定一个有向图,每个点出度最大为一,现在问你图中最长的环的长度是多少,如果没有环输出 -1, 1 ≤ n ≤ 1 0 5 1 \le n \le 10^5 1≤n≤105。 题面 解题思路 我们直接说结论,我们从任意一个点出发,用…...
鸿蒙UI开发
鸿蒙UI开发 本文旨在分享一些鸿蒙UI布局开发上的一些建议,特别是对屏幕宽高比发生变化时的应对思路和好的实践。 折叠屏适配 一般情况(自适应布局/响应式布局) 1.自适应布局 1.1自适应拉伸 左右组件定宽 TypeScript //左右定宽 Row() { …...
华宇TAS应用中间件与晓窗科技智慧校园管理一体化平台完成兼容互认证
近日,华宇TAS应用中间件与安徽晓窗教育科技有限公司(以下简称晓窗科技)的智慧校园管理一体化平台V1.0完成兼容性认证。经双方联合测试,两款产品在稳定性、安全性以及性能等方面表现优异,可以满足政企客户对于数据安全以…...
Java——数组
一、数组是? 数组就是一个容器,用于存储一批同种类型的数据。 数组变量名中存储的是数组在内存中的地址,数组是一种引用数据类型。 二、静态初始化数组 (一)定义 即定义数组的时候直接给数组赋值。 (…...
MySQL排序详解
MySQL支持两种方式排序filesort和indexindex是指扫描索引本身完成排序,index效率高filesort是指通过内存或者排序文件完成排序,filesort效率低 order by满足两种情况时会使用index排序 order by语句使用索引最左列where条件字段和order by字段组合满足索…...
【python实战】-- 选择解压汇总mode进行数据汇总20250329更新
系列文章目录 文章目录 系列文章目录前言一、功能列表二、程序如下:总结 前言 一、功能列表 该模板用于多功能数据汇总处理: 1、用于解压压缩包,输入指定路径,即可解压多级压缩文件; 2、镜筒反射率、LAB文件汇总&…...
Java 程序员面试题:从基础到高阶的深度解析
引言 Java 作为全球最流行的编程语言之一,其面试题不仅考察候选人的编程能力,更关注对底层原理和架构设计的理解。本文将系统梳理 Java 面试中的高频考点,结合代码示例与原理分析,助您从容应对技术面试。 一、Java 基础语法与核…...
JSP(实验):带验证码的用户登录
[实验目的] 1.掌握应用request对象获取表单提交的数据。 2.掌握解决获取表单提交数据产生中文乱码的问题。 3.掌握使用response对象进行定时跳转功能。 4.掌握使用session对象完成登录和注销功能。 [实验要求] 设计带验证码…...
【安全运营】关于攻击面管理相关概念的梳理(二)
CYNC(持续可见性和网络控制) CYNC(Continuous Visibility and Network Control)即“持续可见性和网络控制”,是一个与网络安全和IT运营管理相关的概念。它强调的是在一个组织的数字环境中,确保对所有资产、…...
【Linux篇】进程入门指南:操作系统中的第一步
步入进程世界:初学者必懂的操作系统概念 一. 冯诺依曼体系结构1.1 背景与历史1.2 组成部分1.3 意义 二. 进程2.1 进程概念2.1.1 PCB(进程控制块) 2.2 查看进程2.2.1 使用系统文件查看2.2.2 使⽤top和ps这些⽤⼾级⼯具来获取2.2.3 通过系统调用…...
Linux进程状态补充(10)
文章目录 前言一、阻塞二、挂起三、运行R四、休眠D五、四个重要概念总结 前言 上篇内容大家看的云里雾里,这实在是正常不过,因为例如 写实拷贝 等一些概念的深层原理我还没有讲解,大家不用紧张,我们继续往下学习就行!&…...
STM32_HAL开发环境搭建【Keil(MDK-ARM)、STM32F1xx_DFP、 ST-Link、STM32CubeMX】
安装Keil(MDK-ARM)【集成开发环境IDE】 我们会在Keil(MDK-ARM)上去编写代码、编译代码、烧写代码、调试代码。 Keil(MDK-ARM)的安装方法: 教学视频的第02分03秒开始看。 安装过程中请修改一下下面两个路径,避免占用C盘空间。 Core就是Keil(MDK-ARM)的…...
全自动数字网络机器人:重塑未来的无形引擎 ——从金融量化到万物互联,为何必须“ALL IN”?
全自动数字网络机器人:重塑未来的无形引擎 ——从金融量化到万物互联,为何必须“ALL IN”? (2025年3月29日) “未来十年,代码将比石油更具价值。” —— DeepSeek创始人梁文锋 一、数据洪流与AI进化&#…...
每日一题之修建灌木
问题描述 爱丽丝要完成一项修剪灌木的工作。 有 N 棵灌木整齐的从左到右排成一排。爱丽丝在每天傍晩会修剪一棵灌 木, 让灌木的高度变为 0 厘米。爱丽丝修剪灌木的顺序是从最左侧的灌木开始, 每天向右修剪一棵灌木。当修剪了最右侧的灌木后, 她会调转方向, 下一天开 始向左修…...
智能仪表板DevExpress Dashboard v24.2新版亮点:支持.NET 9
使用DevExpress BI Dashboard,再选择合适的UI元素(图表、数据透视表、数据卡、计量器、地图和网格),删除相应参数、值和序列的数据字段,就可以轻松地为执行主管和商业用户创建有洞察力、信息丰富的、跨平台和设备的决策…...
ubuntu下终端打不开的排查思路和解决方法
问题现象描述:ubuntu开机后系统桌面显示正常,其他图形化的app也都能打开无异常,唯独只有terminal终端打不开,无论是鼠标点击终端软件,还是ctrlaltt,还是altF2后输入gnome-terminal后按回车,这三…...
鸿蒙项目源码-天气预报app-原创!原创!原创!
鸿蒙天气预报项目源码包运行成功含文档ArkTS语言。 我半个月写的原创作品,请尊重原创。 原创作品,盗版必究!!!! 原创作品,盗版必究!!!! 原创作品…...
Turtle事件处理(键盘与鼠标交互)
Turtle 提供了 事件驱动编程,允许我们使用 键盘 和 鼠标 控制 Turtle,从而实现交互式绘图。例如,我们可以让 Turtle 响应 按键、鼠标点击 和 拖动 事件,使其根据用户的输入进行移动、旋转或绘制图形。 1. 事件机制概述 Turtle 的事件处理主要依赖 turtle.Screen() 提供的 …...
算法基础——模拟
目录 1 多项式输出 2.蛇形方阵 3.字符串的展开 模拟,顾名思义,就是题⽬让你做什么你就做什么,考察的是将思路转化成代码的代码能⼒。这类题⼀般较为简单,属于竞赛⾥⾯的签到题(但是,万事⽆绝对ÿ…...
惠普(HP)和联想(Lenovo)作为全球两大电脑品牌,并不是简单的“拼接电脑”
惠普(HP)和联想(Lenovo)作为全球两大电脑品牌,并不是简单的“拼接电脑”,它们都有自己的核心技术、专利设计和生态体系。以下是它们“自己的”核心部分: 1. 关键自研技术 品牌自研技术/专利说明…...
一些练习 C 语言的小游戏
一些练习 C 语言的小游戏 — 1. 猜数字游戏 描述:程序随机生成一个数字,玩家需要猜测这个数字,并根据提示(太高或太低)调整猜测,直到猜中为止。 功能点: 随机数生成 (rand() 函数)。循环和…...
曲线拟合 | Matlab基于贝叶斯多项式的曲线拟合
效果一览 代码功能 代码功能简述 目标:实现贝叶斯多项式曲线拟合,动态展示随着数据点逐步增加,模型后验分布的更新过程。 核心步骤: 数据生成:在区间[0,1]生成带噪声的正弦曲线作为训练数据。 参数设置:…...