浅谈TCP协议、UDP协议
一、介绍说明
TCP(传输控制协议)
-
面向连接:TCP在数据传输之前必须建立连接。这通过一个称为三次握手的过程来完成,确保连接的两端都准备好进行数据传输。
-
可靠性:TCP提供可靠的数据传输,确保数据包正确无误地到达目的地。如果数据包在传输过程中丢失或损坏,TCP会重新发送这些数据包。
-
有序性:TCP保证数据包按照发送的顺序到达接收端。接收方会根据数据包的序列号重新组装数据。
-
拥塞控制:TCP具有拥塞控制机制,能够根据网络状况调整数据发送速率,以避免网络拥塞。
-
流量控制:TCP使用滑动窗口机制来控制发送方的数据流量,确保接收方不会因为数据量过大而无法处理。
-
全双工通信:TCP允许数据在两个方向上同时传输,即发送方和接收方可以同时发送和接收数据。
-
适用场景:由于TCP的可靠性和有序性,它适用于需要数据完整性和顺序的应用,如网页浏览(HTTP)、文件传输(FTP)、电子邮件(SMTP)和远程登录(SSH)。
UDP(用户数据报协议)
-
无连接:UDP是一个无连接的协议,数据传输前不需要建立连接。发送方可以直接发送数据包,而不需要等待接收方的确认。
-
不可靠性:UDP不保证数据包的可靠传输。数据包可能会丢失、重复或乱序到达,但UDP不负责重新发送丢失的数据包。
-
低延迟:由于UDP没有建立连接和复杂的控制机制,它通常具有较低的延迟,适合需要快速传输的应用。
-
简单性:UDP的协议结构简单,头部开销小,这使得它在需要快速、简单传输的场景下非常有效。
-
适用场景:UDP适用于对实时性要求高、可以容忍一定数据丢失的应用。例如,视频会议、在线游戏、DNS查询和某些类型的流媒体服务。
二、简单代码示例
TCP服务器示例(Python)
import socketdef tcp_server():# 创建socket对象server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 设置服务器地址和端口host = '127.0.0.1'port = 12345# 绑定地址和端口server_socket.bind((host, port))# 开始监听连接server_socket.listen(5)print("服务器启动,等待连接...")while True:# 接受客户端连接client_socket, addr = server_socket.accept()print(f"接收到来自 {addr} 的连接")# 接收数据data = client_socket.recv(1024)if not data:breakprint(f"收到数据:{data.decode('utf-8')}")# 发送数据client_socket.sendall(data)# 关闭客户端连接client_socket.close()if __name__ == '__main__':tcp_server()
TCP客户端示例(Python)
import socketdef tcp_client():# 创建socket对象client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 设置服务器地址和端口host = '127.0.0.1'port = 12345# 连接服务器client_socket.connect((host, port))# 发送数据message = 'Hello, Server!'client_socket.sendall(message.encode('utf-8'))# 接收数据data = client_socket.recv(1024)print(f"收到服务器响应:{data.decode('utf-8')}")# 关闭连接client_socket.close()if __name__ == '__main__':tcp_client()
UDP服务器示例(Python)
import socketdef udp_server():# 创建socket对象server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 设置服务器地址和端口host = '127.0.0.1'port = 12345# 绑定地址和端口server_socket.bind((host, port))print("UDP服务器启动,等待数据...")while True:# 接收数据data, addr = server_socket.recvfrom(1024)print(f"收到来自 {addr} 的数据:{data.decode('utf-8')}")# 发送响应数据server_socket.sendto(b'收到你的数据', addr)if __name__ == '__main__':udp_server()
UDP客户端示例(Python)
import socketdef udp_client():# 创建socket对象client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 设置服务器地址和端口host = '127.0.0.1'port = 12345# 发送数据message = 'Hello, UDP Server!'client_socket.sendto(message.encode('utf-8'), (host, port))# 接收响应数据data, server = client_socket.recvfrom(1024)print(f"收到服务器响应:{data.decode('utf-8')}")# 关闭socketclient_socket.close()if __name__ == '__main__':udp_client()
相关文章:
浅谈TCP协议、UDP协议
一、介绍说明 TCP(传输控制协议) 面向连接:TCP在数据传输之前必须建立连接。这通过一个称为三次握手的过程来完成,确保连接的两端都准备好进行数据传输。 可靠性:TCP提供可靠的数据传输,确保数据包正确无…...
SQL业务题: 从不订购的客户
1️⃣题目 Customers 表: ---------------------- | Column Name | Type | ---------------------- | id | int | | name | varchar | ---------------------- 在 SQL 中,id 是该表的主键。 该表的每一行都表示客户的 ID 和名…...
怎么直接在PDF上修改内容?随心编辑PDF内容
PDF(Portable Document Format)作为一种专用于阅读而非编辑的文档格式,其设计的核心目的是保持文档格式的一致性,确保文档在不同平台和设备上都能以相同的布局和格式呈现。然而,在实际工作和生活中,我们经常需要对PDF文档进行编辑…...
聊天室项目测试报告
项目介绍 本项目是一个基于Spring Boot框架开发的聊天室应用。一个实时的文本消息交流平台,允许多个用户同时在线聊天。系统采用了Spring Boot作为后端框架,集成了WebSocket技术以实现消息的实时推送与接收提供一个简单、易用且功能完备的在线聊天环境。…...
语音识别(实时语音转录)——funasr的详细部署和使用教程(包括实时语音转录)
阿里达摩院开源大型端到端语音识别工具包FunASR: FunASR提供了在大规模工业语料库上训练的模型,并能够将其部署到应用程序中。工具包的核心模型是Paraformer,这是一个非自回归的端到端语音识别模型,经过手动注释的普通话语音识别…...
【网络编程】TCP机械臂测试
通过w(红色臂角度增大)s(红色臂角度减小)d(蓝色臂角度增大)a(蓝色臂角度减小)按键控制机械臂 注意:关闭计算机的杀毒软件,电脑管家,防火墙 1)基于TCP服务器…...
笔记:在WPF中如何注册控件级全局事件和应用程序级全局事件
一、目的:在WPF中如何注册控件级全局事件和应用程序级全局事件 二、实现 应用程序级全局事件 //注册应用程序级全局事件 EventManager.RegisterClassHandler(typeof(Button), Button.ClickEvent, new RoutedEventHandler(ic_event_Click)); 如上代码既会注册全局…...
【Linux系列】telnet使用入门
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
音视频相关知识
H.264编码格式 音频 PCM就是要把声音从模拟信号转换成数字信号的一种技术,他的原理简单地说就是利用一个固定的频率对模拟信号进行采样。 pcm是无损音频音频文件格式...
数据结构--第七天
递归 -递归的概念 递归其实就是一种解决问题的办法,在C语言中:递归就是函数自己调用自己 -递归的思想 递归的思考方式就是把大事化小的过程 递归的递就是递推的意思,归就是回归的意思 (递归是少量的代码完成大量的运算)…...
代码随想录Day34:62.不同路径、63.不同路径II、343.整数拆分、96.不同的二叉搜索树
62. 不同路径 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径&…...
【信息学奥赛一本通】1008:计算(a+b)/c的值
1008:计算(ab)/c的值 时间限制: 1000 ms 内存限制: 66536 KB 提交数:164836 通过数: 142434 【题目描述】 给定3个整数a、b、c,计算表达式abc的值。 【输入】 输入仅一行,包括三个整数a、b、c, 数与数之间以一个空格分开。(-10,…...
使用 jstat 进行 Java 应用程序性能监控
jstat 使用经验笔记 1. 简介 jstat 是 Java 开发工具包 (JDK) 中的一个命令行工具,用于监控 Java 虚拟机 (JVM) 的运行时状态,特别是垃圾回收 (Garbage Collection, GC) 的行为。通过使用 jstat,你可以监控和诊断 Java 应用程序的内存使用情…...
Prompt指令调优大揭秘
Hey,技术达人们!今天咱们就来聊聊Prompt指令调优的那些事儿。想象一下,你有一个超级智能的AI小伙伴,但要让它更懂你,更给力,那就得靠点“魔法”——Prompt指令调优。准备好了吗?让我们一探究竟&…...
C语言中的⽂件操作
1. 为什么使⽤⽂件? 如果没有⽂件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运⾏程序,是看不到上次程序的数据的,如果要将数据进⾏持久化…...
黑马前端——days14_js
案例 1 页面框架文件 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title>&l…...
【自动驾驶】ROS中参数服务器通信(c++)
目录 通信过程新建参数服务器包编写测试文件修改cmakelist:搭配launch文件启动测试及结果 通信过程 1.Talker 设置参数 Talker 通过 RPC 向参数服务器发送参数(包括参数名与参数值),ROS Master 将参数保存到参数列表中。 2.Listener 获取参数 Listener 通过 RPC 向…...
零基础5分钟上手亚马逊云科技核心云开发知识 - 网络基础
简介: 欢迎来到小李哥全新亚马逊云科技AWS云计算知识学习系列,适用于任何无云计算或者亚马逊云科技技术背景的开发者,通过这篇文章大家零基础5分钟就能完全学会亚马逊云科技一个经典的服务开发架构方案。 我会每天介绍一个基于亚马逊云科技…...
Unity Recttransform操作
1、拉伸铺满 RectTransform rect GetComponent<RectTransform>();rect.anchorMin Vector2.zero;rect.anchorMax Vector2.one;rect.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, Screen.width);rect.SetSizeWithCurrentAnchors(RectTransform.Axis.Verti…...
MIT线性代数P5
置换矩阵 置换矩阵是行重新排列的单位矩阵。 置换矩阵用P表示, 性质: n阶置换矩阵共有n!个...
智能汽车纵向行车辅助分层控制【附程序】
✨ 长期致力于交通事故场景分析、智能跟车、自动紧急制动、分层控制、联合仿真测试研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1)基于真实事故场景的…...
3个技巧让Clipy彻底改变你的macOS剪贴板使用体验
3个技巧让Clipy彻底改变你的macOS剪贴板使用体验 【免费下载链接】Clipy Clipboard extension app for macOS. 项目地址: https://gitcode.com/gh_mirrors/cl/Clipy 你是不是经常遇到这样的情况:刚刚复制了一段重要信息,又复制了其他内容…...
手把手教你解决Ubuntu 16.04虚拟机安装Matlab 2018a时的‘DVD2’挂载难题
深度解析Ubuntu虚拟机安装Matlab时的多镜像挂载技巧 在科研和工程领域,Matlab作为一款功能强大的数学计算软件,其安装过程却常常让Linux用户尤其是虚拟机使用者头疼不已。特别是当安装进行到一半,系统突然提示"请插入DVD2"时&…...
用CC2530 DIY一个无线串口透传模块:基于Zigbee的无线数据收发实践
基于CC2530的Zigbee无线串口透传模块实战指南 在物联网和智能硬件开发领域,无线数据传输一直是核心需求之一。CC2530作为一款集成了Zigbee射频前端的经典芯片,其成本效益和成熟生态使其成为众多开发者的首选。本文将带您深入探索如何利用两块CC2530开发板…...
船载AIS的Class A、Class B和接收器到底怎么选?一篇讲清休闲帆船、渔船和小货船的设备配置指南
船载AIS设备选购全指南:从合规到实战的智能决策 清晨的港口,一艘30英尺的休闲帆船正在做最后的出海准备。船长盯着仪表盘上闪烁的AIS接收器信号,思考着是否该升级为收发一体的Class B设备——这个决定可能关系到未来航行中能否被大型商船及时…...
EPLAN浮动许可利用率低:软件许可浪费,解决许可不足
EPLAN浮动许可利用率低?别再浪费了!你是不是也遇到过这种事:新项目启动前看许可证池还有几个名额,结果发现上个月的几个许可证一直在等?我就踩了这个坑,发现公司用EPLAN的几个项目组天天在"抢"许…...
魔兽争霸3游戏优化终极指南:3步解决帧率限制与界面显示问题
魔兽争霸3游戏优化终极指南:3步解决帧率限制与界面显示问题 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3的卡顿画面和界…...
KLA 073-404555-00驱动板
KLA 073-404555 是一款用于工业伺服驱动系统的驱动板,结构紧凑、响应可靠,适用于电机驱动与控制应用。中间 15 条特点:板卡尺寸小巧,便于安装于驱动单元内部。支持宽电压输入范围,适应不同供电环境。驱动输出稳定&…...
全球首款量产载人变形机甲,硬核科技颠覆出行想象
全球首款量产版载人变形机甲!2026 年 5 月 12 日,中国宇树科技正式发布 GD01,既能载人操控、又能双足 / 四足快速变形,定位民用交通工具,载人后总重约 500kg,直接拉满硬核科技期待感!一、GD01 核…...
【ElevenLabs有声书量产指南】:从零到上线的7步闭环流程(含避坑清单+API调优参数)
更多请点击: https://intelliparadigm.com 第一章:ElevenLabs有声书量产的底层逻辑与场景定位 ElevenLabs 的有声书量产并非简单调用 TTS API,而是依托其神经语音建模、上下文感知韵律合成与批量异步编排三重能力构建的工业化流水线。其底层…...
