当前位置: 首页 > 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!个...

看完就会:2026年最强AI论文写作软件榜单,AI工具一键写高质论文

2026 年实测 10 款主流 AI 论文工具&#xff0c;千笔AI以全流程覆盖 语义级降重 免费查重领跑综合榜&#xff1b;ThouPen 稳坐留学生毕业全流程工具头把交椅&#xff1b;免费工具中DeepSeek Scholar、豆包学术版表现亮眼&#xff0c;30 分钟即可生成万字高质量初稿&#xff0…...

Wireshark网络分析8大实用技巧详解

8个Wireshark网络分析实用技巧深度解析1. 数据包过滤技术精要1.1 IP地址过滤在复杂网络环境中快速定位特定设备通信流&#xff1a;ip.addr192.168.1.100 # 过滤特定IP的所有通信 ip.src192.168.1.100 and ip.dst10.0.0.1 # 精确源目地址过滤1.2 协议栈组合过滤实现多层协议联…...

【CryptoJS】------CryptoJS版本选择与下载指南

1. CryptoJS简介与版本选择策略 CryptoJS是一个纯JavaScript实现的加密算法库&#xff0c;支持常见的哈希算法&#xff08;如MD5、SHA系列&#xff09;、对称加密&#xff08;如AES、DES&#xff09;和非对称加密&#xff08;如RSA&#xff09;。我在实际项目中使用这个库已有…...

告别文件传输烦恼:用aliyunpan快传链接实现秒级大文件分享

告别文件传输烦恼&#xff1a;用aliyunpan快传链接实现秒级大文件分享 【免费下载链接】aliyunpan 阿里云盘命令行客户端&#xff0c;支持JavaScript插件&#xff0c;支持同步备份功能。 项目地址: https://gitcode.com/GitHub_Trending/ali/aliyunpan 你是否也曾经历过…...

如何用Java处理地震波?信号滤波算法

常用的地震波信号滤波算法包括傅里叶转换&#xff08;fft&#xff09;与频域滤波器、fir滤波器、iir滤波器和中值滤波器一起。. 通过将时域信号转换为频域&#xff0c;java可以通过apache实现特定频率组件的操作 commons math库中的fastfouriertransformer类实现&#xff1b;2.…...

从命令行工具到桌面体验:SyncTrayzor如何让Syncthing在Windows上焕然新生

从命令行工具到桌面体验&#xff1a;SyncTrayzor如何让Syncthing在Windows上焕然新生 【免费下载链接】SyncTrayzor Windows tray utility / filesystem watcher / launcher for Syncthing 项目地址: https://gitcode.com/gh_mirrors/sy/SyncTrayzor 你是否曾经在Window…...

comsol仿真建模 由于结构本身的复杂性,很难对实际多孔结构中的流动进行建模。 在实际应用中...

comsol仿真建模 由于结构本身的复杂性&#xff0c;很难对实际多孔结构中的流动进行建模。 在实际应用中&#xff0c;详细求解流场不可行。 因此&#xff0c;使用了利用多孔结构平均物理量 &#xff08;如孔隙率和渗透率&#xff09;的宏观方法。 本例详细分析孔隙尺度的流场&am…...

终极美化指南:foobar2000如何通过foobox-cn打造你的专属音乐空间?

终极美化指南&#xff1a;foobar2000如何通过foobox-cn打造你的专属音乐空间&#xff1f; 【免费下载链接】foobox-cn DUI 配置 for foobar2000 项目地址: https://gitcode.com/GitHub_Trending/fo/foobox-cn 厌倦了千篇一律的音乐播放器界面&#xff1f;想让你的音乐体…...

3步搞定AtlasOS系统技术故障:Xbox控制器驱动完全解决方案

3步搞定AtlasOS系统技术故障&#xff1a;Xbox控制器驱动完全解决方案 【免费下载链接】Atlas &#x1f680; An open and lightweight modification to Windows, designed to optimize performance, privacy and security. 项目地址: https://gitcode.com/GitHub_Trending/at…...

DEFOM-Stereo vs RAFT-Stereo:双目匹配领域的新旧王者对比实测(附KITTI数据集结果)

DEFOM-Stereo与RAFT-Stereo&#xff1a;双目视觉技术的实战性能解析 在计算机视觉领域&#xff0c;双目立体匹配技术一直是实现三维场景重建和环境感知的核心方法之一。近年来&#xff0c;随着深度学习技术的快速发展&#xff0c;RAFT-Stereo等基于神经网络的双目匹配算法已经展…...