当前位置: 首页 > news >正文

浅谈TCP协议、UDP协议

一、介绍说明

TCP(传输控制协议)

  1. 面向连接:TCP在数据传输之前必须建立连接。这通过一个称为三次握手的过程来完成,确保连接的两端都准备好进行数据传输。

  2. 可靠性:TCP提供可靠的数据传输,确保数据包正确无误地到达目的地。如果数据包在传输过程中丢失或损坏,TCP会重新发送这些数据包。

  3. 有序性:TCP保证数据包按照发送的顺序到达接收端。接收方会根据数据包的序列号重新组装数据。

  4. 拥塞控制:TCP具有拥塞控制机制,能够根据网络状况调整数据发送速率,以避免网络拥塞。

  5. 流量控制:TCP使用滑动窗口机制来控制发送方的数据流量,确保接收方不会因为数据量过大而无法处理。

  6. 全双工通信:TCP允许数据在两个方向上同时传输,即发送方和接收方可以同时发送和接收数据。

  7. 适用场景:由于TCP的可靠性和有序性,它适用于需要数据完整性和顺序的应用,如网页浏览(HTTP)、文件传输(FTP)、电子邮件(SMTP)和远程登录(SSH)。

UDP(用户数据报协议)

  1. 无连接:UDP是一个无连接的协议,数据传输前不需要建立连接。发送方可以直接发送数据包,而不需要等待接收方的确认。

  2. 不可靠性:UDP不保证数据包的可靠传输。数据包可能会丢失、重复或乱序到达,但UDP不负责重新发送丢失的数据包。

  3. 低延迟:由于UDP没有建立连接和复杂的控制机制,它通常具有较低的延迟,适合需要快速传输的应用。

  4. 简单性:UDP的协议结构简单,头部开销小,这使得它在需要快速、简单传输的场景下非常有效。

  5. 适用场景: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语言中:递归就是函数自己调用自己 -递归的思想 递归的思考方式就是把大事化小的过程 递归的递就是递推的意思,归就是回归的意思 (递归是少量的代码完成大量的运算&#xff09…...

代码随想录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 向参数服务器发送参数(包括参数名与参数值)&#xff0c;ROS Master 将参数保存到参数列表中。 2.Listener 获取参数 Listener 通过 RPC 向…...

零基础5分钟上手亚马逊云科技核心云开发知识 - 网络基础

简介&#xff1a; 欢迎来到小李哥全新亚马逊云科技AWS云计算知识学习系列&#xff0c;适用于任何无云计算或者亚马逊云科技技术背景的开发者&#xff0c;通过这篇文章大家零基础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表示&#xff0c; 性质&#xff1a; n阶置换矩阵共有n!个...

杰理芯片不用代码 给别人下载升级方法

先打开sdk 打开cpu找到cpu里的tools 然后把tools整个压缩成压缩包发给要下载升级的人就好下载升级方式&#xff1a;先连接好升级工具 然后打开tools 之后双击download.bat一般出现数字 例如 3.7.25.67 就是一系列数字就是升级成功了...

从Markdown到清晰语音:我是如何用ttsfrd + CosyVoice模型搞定技术文档朗读的

从Markdown到清晰语音&#xff1a;技术文档朗读的工程化实践 每天早上七点&#xff0c;我都要挤进这座城市最拥挤的地铁线。作为开发者&#xff0c;通勤时间曾是知识更新的黑洞——直到我发现将技术文档转为语音的解决方案。这不仅改变了我的学习方式&#xff0c;更为视障程序员…...

QChart实战:从零构建动态数据波形图(含完整代码与注释)

1. 环境准备与基础配置 在开始构建动态波形图之前&#xff0c;我们需要先搭建好开发环境。这里假设你已经安装了Qt Creator&#xff0c;我推荐使用5.15或更高版本&#xff0c;因为这个版本对QChart的支持最完善。如果你还没安装&#xff0c;可以直接去Qt官网下载开源版本。 首…...

别再死磕分布式事务了!用MySQL+RabbitMQ手撸一个本地消息表,搞定订单库存一致性问题

轻量级数据一致性实战&#xff1a;基于MySQL与RabbitMQ的本地消息表设计 在电商系统开发中&#xff0c;订单创建与库存扣减的原子性操作一直是技术难点。传统单体架构下的数据库事务无法跨越服务边界&#xff0c;而引入分布式事务框架又往往带来额外的复杂性和性能损耗。本文将…...

零基础玩转CosyVoice:3步完成声音克隆,制作专属语音祝福

零基础玩转CosyVoice&#xff1a;3步完成声音克隆&#xff0c;制作专属语音祝福 1. 引言&#xff1a;让声音成为你的专属礼物 你有没有想过&#xff0c;用自己或亲友的声音&#xff0c;生成一段独一无二的语音祝福&#xff1f;比如&#xff0c;用妈妈的声音说“生日快乐”&am…...

OptiScaler终极指南:打破DLSS垄断,让所有显卡都能享受AI超分辨率

OptiScaler终极指南&#xff1a;打破DLSS垄断&#xff0c;让所有显卡都能享受AI超分辨率 【免费下载链接】OptiScaler DLSS replacement for AMD/Intel/Nvidia cards with multiple upscalers (XeSS/FSR2/DLSS) 项目地址: https://gitcode.com/GitHub_Trending/op/OptiScaler…...

Qwen3-TTS-VoiceDesign一文详解:speech_tokenizer作用机制与语音表征可视化

Qwen3-TTS-VoiceDesign一文详解&#xff1a;speech_tokenizer作用机制与语音表征可视化 1. 引言&#xff1a;从文字到声音的魔法转换 你有没有想过&#xff0c;为什么现在的AI语音合成听起来越来越像真人&#xff1f;为什么只需要用文字描述"温柔的成年女性声音"&a…...

别再乱用@DateTimeFormat和@JsonFormat了!SpringBoot时间处理保姆级避坑指南

SpringBoot时间格式化深度解析&#xff1a;从注解误用到生产级解决方案 凌晨三点&#xff0c;服务器告警铃声划破寂静——某跨境支付系统突然出现大量交易时间戳错误&#xff0c;导致对账差异超过百万美元。团队紧急排查发现&#xff0c;问题根源竟是开发人员混用了JsonFormat…...

如何让AI成为你的第二大脑?AnythingLLM浏览器扩展使用指南

如何让AI成为你的第二大脑&#xff1f;AnythingLLM浏览器扩展使用指南 【免费下载链接】anything-llm 这是一个全栈应用程序&#xff0c;可以将任何文档、资源&#xff08;如网址链接、音频、视频&#xff09;或内容片段转换为上下文&#xff0c;以便任何大语言模型&#xff08…...

Alibaba DASD-4B Thinking 对话工具应用:自动化软件测试用例生成与评审

Alibaba DASD-4B Thinking 对话工具应用&#xff1a;自动化软件测试用例生成与评审 每次新版本上线前&#xff0c;测试团队是不是都忙得焦头烂额&#xff1f;产品需求文档改了又改&#xff0c;测试用例也得跟着一遍遍更新&#xff0c;手动编写不仅耗时&#xff0c;还容易遗漏边…...