为什么聊天软件一般采用UDP协议

浅析im即时通讯开发中TCP和UDP的区别 网络协议是每个搞网络通信应用开发(比如IM、推送、网关等等)的程序员都必须要掌握的基础知识,TCP/IP协议簇中有两个最具有代表性的传输层协议——分别是 TCP 和 UDP。有过网络通信开发经验的同学们都知道,TCP和UDP协议是平时用的最多的两种协议,而对于很多人来说,什么时候以及什么场景下该用TCP还是UDP?这是个经久不息的讨论话题。 不同于其它长篇大论,本文尽量以简洁精炼的文字,帮你总结归纳TCP和UDP协议的主要区别,方便那些想掌握这方面知识又不愿意耗费太多时间去系统地学习网络理论基础的同学快速理 阅读详情

 

TCP是美国国防部设计的两种传输协议之一,另一种是UDP。UDP是一种不可靠的网络服务,负载比
较小,而TCP则是一种可靠的通信服务,负载相对而言比较大。TCP采用套接字(socket)或者端口
(port)来建立通信。TCP给端口到端口通信提供了错误和流量控制机制,同时TCP还负责建立连接
、处理终止和中断的端对端通信控制。 
  
通常情况下我们认为TCP相比UDP具有更大的通信负载,UDP不具备TCP的控制特性,TCP用了大约20个字节来发送一个65Kbps的数据块,
这个报头占整个数据块的比重也不过3%。总得来看,这个负载是合理的,何况还令通信具有了可靠性性。
  tcp udp
 是否连接 面向连接 面向非连接
 传输可靠性 可靠的 不可靠的
 应用场合 传输大量数据 传输少量数据
 速度 慢 快
 
所以UDP的速度快的优点是很关键的因素,而且,UDP是“推”的协议,有多少个接收客户,客户端
是否链接均无所谓,只顾把数据发送/广播出去就行;这对链接不可靠,需要一对多等情形很有用。
TCP关键是可靠,是基于可靠链接基础上的协议,因而可能较慢,网络数据量较大。

当然UDP并不一定永远都比TCP快。我们之所以认为UDP快,仅仅是从报头中传输的信息比重更大来考虑
的。但是如果网络情况,可能UDP就不一定比TCP快了。UDP只负责发送,因而不会管网络的情况,一旦
网络阻塞,继续发UDP包只会加重整个网络的负担。而此时TCP的控制及复杂的传输算法就起到很好的
作用了。通过自适应窗口等方式减少实际发往网络的数据。就像堵车的时候一样,UDP只会越来越堵,
而TCP还可以缓慢的行走。还有像聊天这种及时性高,如果采用TCP短连接,频繁的连接断开也会增加
网络负担。

综上所述:如果是每次连接时间较短,或者即时性要求高,发送内容较少,则采用UDP;而对数据完整
性、可靠性要求较高,传输性能要求较低时采用TCP。

而我们知道像QQ这种大型的聊天软件却主要使用的是UDP连接,而以TCP为辅。即使是传文件,也是以UDP
为主,个人认为这主要还是从服务器的角度来考虑的。
首先是每一个客户实际上都是和服务器交互,再由服务器转发给正在通信的用户。
如果每一个QQ从一上线到下线的这段时间全部采用TCP长连接,这对服务器的负担很大。而如果采用TCP
短连接,频繁的连接断开也会造成网络负担。而采用UDP则可以避开上述这些麻烦,减少服务器的负担。

 

 

基于上述不同,UDP和TCP编程步骤也有些不同,如下: 
TCP编程的服务器端一般步骤是:UDP编程的服务器端一般步骤是:

1、创建一个socket,用函数socket();   

2、设置socket属性,用函数setsockopt(); * 可选 

3、绑定IP地址、端口等信息到socket上,用函数bind();  

4、开启监听,用函数listen();   

5、接收客户端上来的连接,用函数accept();

6、收发数据,用函数send()和recv(),或者read()和write();   

7、关闭网络连接;   

8、关闭监听;

1、创建一个socket,用函数socket();  

2、设置socket属性,用函数setsockopt();* 可选   

3、绑定IP地址、端口等信息到socket上,用函数bind();

4、循环接收数据,用函数recvfrom(); 

5、关闭网络连接;

TCP编程的客户端一般步骤是: UDP编程的客户端一般步骤是:

1、创建一个socket,用函数socket();   

2、设置socket属性,用函数setsockopt();* 可选   

3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选   

4、设置要连接的对方的IP地址和端口等属性;   

5、连接服务器,用函数connect(); 

6、收发数据,用函数send()和recv(),或者read()和write();   

7、关闭网络连接;

1、创建一个socket,用函数socket();   

2、设置socket属性,用函数setsockopt();* 可选   

3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选   

4、设置对方的IP地址和端口等属性; 

5、发送数据,用函数sendto();   6、关闭网络连接;

 

初学java之模拟QQ聊天软件(简单实现) 大一上学期初学java之期末课程设计–模拟QQ聊天软件(简单实现)引言:这个程序是自从学习java以来写的第一个比较大的图形界面程序,花费了大约一周的时间,作为期末的课程设计,也算是基本上完成了任务,当然由于作者的编程能力有限,代码中难免存在BUG,不太简练,今天搬到博客上来,也算是对自己学习历程的一段记录吧,当然,如果我的这篇博客有幸被诸君看到,欢迎提出意见和建议,这篇博客仅仅作为我的一个记录吧, 阅读详情

相关推荐

Qt练习UDP聊天软件

Qt练习UDP聊天软件

weixin_41560737的博客 2089

TCP和UDP的区别以及它们各自的优缺点

TCP和UDP的区别以及它们各自的优缺点

aoeaoao的博客 1579

QT -- UdpSocket通信实例,使用Qt的UDP通信协议,实现局域网组播通信软件功能

使用Qt - udp通信方式,构建局域网聊天通信软件1.简介效果2.项目设计1)流程图2)项目构建3)界面构建4)代码设计a.widget.hb.widget.cppc.secondwidget.hd.secondwidget.cpp3.源代码widget.hwidget.cppsecondwidget.hsecondwidget.cpp 1.简介效果 在之前的文章中,介绍了TCP协议在Qt中的应...

Freedom_Blue的博客 2万+

TCP和Udp的区别是什么

1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)4、每一条TCP连接只能是点到点的;

weixin_54514751的博客 1019

Linux环境UDP聊天软件开发指南

Linux网络编程是构建网络应用与服务的基础。它涉及使用套接字(sockets)来实现不同计算机间的通信。本章将概述Linux下网络编程的基本概念,以及其在C语言中的表现形式,为深入学习后续章节奠定基础。本章节深入解析了UDP协议的特点、应用场景,以及如何使用C语言进行UDP网络编程。通过代码示例与逻辑分析,我们了解了UDP通信的基础、客户端与服务器端编程的实现细节,以及性能优化和错误处理方法。在下一章节,我们将深入探讨局域网聊天软件的设计与实现,了解如何将这些基础知识点应用在构建实际应用软件中。

weixin_42607969的博客 1117

基于Windows API与UDP的实时语音聊天软件开发实战

各模块间通过标准化接口交互,保证松耦合与高内聚。以下是核心接口设计示例:模块接口函数参数说明返回值采样率(Hz),位深(bit)bool: 是否成功启动回调函数指针voidudp_socket数据缓冲区、目标IP/端口int: 实际发送字节数接收回调voidPCM数据块bool: 是否入队成功音频数据流的完整路径如下图所示(使用Mermaid流程图):graph LRA[麦克风输入] --> B(waveIn采集)

weixin_42571280的博客 807

网络:为什么QQ用的以UDP为主,TCP为辅助

TCP VS UDP 这两种传输协议用于不同的业务和不同的硬件终端 类似于图像、声音等对可靠性要求没有那么高的业务可以用UDP,它们不需要准确存储对准备性无要求但要求速度快。类似于文本、程序、文件等要求可靠的数据最好就用TCP,但会牺牲一些速度 对系统资源的要求:TCP较多、UDP少 程序结构:UDP程序结构较简单,TCP复杂 流模式与数据报模式:TCP保证数据正确、UDP可能丢包 TCP保证数据顺序,UDP不保证 用途: TCP是面向连接的,有比较高的可靠性,一些要求比较高的服务使用这些协议,比如F

OceanStar的博客 5742

图腾柱无桥PFC控制逻辑解析:从双闭环到电压前馈的设计演进

本文深入解析图腾柱无桥PFC控制逻辑的设计演进,从经典双闭环控制到电压前馈技术的实现。通过分析功率波动问题和动态响应慢的症结,提出引入电压前馈的解决方案,并详细探讨数字实现中的关键注意事项。文章还涵盖控制框图的构建、稳定性分析方法及实际应用中的调参技巧,为开关电源设计提供实用指导。

weixin_29268267的博客 571

TCP、UDP网络协议(文件传输、消息聊天)

TCP、UDP协议 1.1、网络通信要素 1.网络编程中两个主要问题 如何准确定位到网络上的一台主机或者多台主机 找到主机之后如何进行通信 2.网络编程中的要素 IP和端口号 网络通信协议 UDP、TCP 1.2、IP 含义: ip(InetAdsress)唯一定位一台网络上计算机 本机地址:127.0.0.1,localhost import java.net.InetAddress; import java.net.UnknownHostException; //测试IP public clas

小小猿的博客 873

自托管AI邮件助手imap-mcp:安全连接Claude与个人邮箱的完整指南

在AI助手日益普及的今天,如何安全地让AI访问个人邮箱数据成为关键挑战。传统方法如直接暴露IMAP/SMTP凭证存在严重安全隐患,而第三方SaaS服务则涉及隐私泄露风险。Model Context Protocol (MCP) 作为一种新兴的标准化协议,为AI工具安全接入提供了解决方案。其核心价值在于实现数据源与AI助手间的安全、标准化交互,特别适用于处理敏感信息的场景。imap-mcp正是基于MCP协议构建的自托管邮件网关,它通过多层安全机制(包括主密钥加密和OAuth令牌哈希化)保护用户凭证,让用户能在

weixin_28295799的博客 655

dxf-viewer 查看器

dxf-viewer SDK 的示例,它是一个基于 Three.js 和 Vue3 构建的基于 WebGL 的 BIM 模型查看器。它用于查看 DWG/DXF/PDF 文件。面积测量 - 角度测量 -标记。

qq_25547755的博客 866

如何用C#做一个简单的UDP协议聊天软件

一款基于Udp协议的聊天软件 by C# WinForm Information: 最近在学计算机网络,学到了TCP协议和UDP协议,这里具体就不说这两个协议了,主要讲讲如何通过C#Winform来写一个聊天程序,用实践来加深理论。由于学习时间的安排,我分阶段实现这个程序的功能。TCP和UDP的实现都差不多,都是用的套接字,所以我就只介绍UDP的了 MyTask: OneChat task Simple UI Winform窗体搭建 实现UDP通信 UDP Send data UDP Rece

Rayone_的博客 1345

解决群晖NAS无法拉取docker镜像问题

在2024-06-01日以前,使用SSH登录后是可以直接拉取docker镜像的;但是之后当我们使用SSH登录上群晖NAS,使用【sudo -i】切换到超管拉取镜像会提示报错【error pulling image configuration: Get "https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/cf/cff6b68a194a672fd337d8728bfb252071012cce6

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 2万+

UDP协议及其安全隐患

UDP协议 UDP协议是TCP/IP协议栈中传输层另外一个中要的协议。 UDP协议的消息格式 源端口和目的端口也是用来标志应用程序 UDP协议的特点 无连接的协议 传输数据之前,源端和目的端无需建立连接。 不像TCP协议那样需要建立连接以后才能传输数据,而是在每一个消息数据中都包含目的地址的信息。 不可靠的协议 UDP协议不存在序列号和确认好号,如果在从发送方到接收方的传递过程中出现数据报的 丢...

浮云渐渐 7215

RT-Thread精通PM功耗调优 - Tickless篇

背景 让别人的思想装到自己的脑袋里,这不仅需要威逼利诱,还需要讲清楚原理。喜欢才能接受。 功耗基本的调试手段,估计前面讲了很多,或许只有少数人群可以接受。 更有极少的人,了解了整个功耗管理的体系、原理,愿意接受这样的【安排】。 这里的功耗调优思路,其实只是解决功耗问题的一种思路,并不是框架。 解决问题,自古以来,都是千奇百怪,秒在【奇】。 介绍 本篇介绍下Tickless的工作原理。 Tickless 可以理解为:tick-less,tick or little tick。 tick定.

坚韧与专注 1529

OpenHarmony电源管理驱动架构剖析:HDI框架下的低功耗实现

鸿蒙电源管理驱动模块是OpenHarmony操作系统中负责设备电源状态管理的核心组件。该模块基于HDI(Hardware Device Interface)框架实现,提供了完整的电源管理功能,包括系统休眠/唤醒、运行锁管理、休眠模式控制等核心功能。public:// 主要接口函数// 运行锁管理private:// 内部辅助函数// 成员变量public:// 运行锁控制接口// 回调管理private:// 内部辅助函数。

m0_67505153的博客 208

通过python带你打造udp聊天软件

大家好,我是天空之城。 今天给大家带来,通过python带你打造udp聊天软件。 udp是位于ip网络层之上的运输层,类似于tcp协议,再往上就是socket抽象层和用户应用层。socket又称为套接字,简单理解就是两个节点之间为了通信,在各自家里装了一部电话可以实现通信,只管发送,不管接收。但这与tcp的双向传输是不同的。 首先,自己先下载安装一个网络调试助手小软件。 第一部分,通过pycharm发送数据 def main(): # 1.创建套接字 udp_s = socket.sock

littlespider889的博客 2051

三维空间刚体运动4-3:四元数线性插值方法:Squad

摘要:四元数插值三个方法Slerp、Squad和Spring既复杂又很重要,为了详细阐述,故每个方法独立成一篇博文讲解,没有插值的四元数是没有灵魂的,插值的重要性不言而喻。Slerp是经典的两点间一阶连续可导插值方法,Squad方法在Slerp的基础上实现多点间的一阶连续可导,而Spring则可以实现多点间的二阶连续可导,更适合复杂的曲线,此系列博文也是国内首篇介绍Spring的中文资料。

shao918516的博客 9217

分析QQ微信使用的是UDP还是TCP协议

首先需要明白TCP UDP各自的概念以及区别 tcp: 传输控制协议,全拼:Transmission Control Protocol 它是一个面向连接,可靠的传输协议 udp: 用户数据报协议,全拼:User Datagram Protocol 它不是面向连接,不是可靠的传输协议, udp协议传输速度快 tcp和udp都是传输层的两个传输协议 tcp的特点: 4.1 面向连接,间接验证对方ip...

Cement20的博客 2万+

YOLOv8/v9工业零件缺陷检测实战指南:从原理到产线部署

摘要:本文系统介绍基于YOLOv8/v9的工业零件缺陷检测技术,从工业质检背景与需求出发,详解缺陷检测原理、算法构建与模型训练,提供从数据集准备到移动端部署的全流程实操方案。包含多尺度检测、纹理分析等高级技术,适配工业相机的环境优化策略,以及完整质检系统代码实现。适合工业视觉领域新手与进阶开发者,助力快速构建高鲁棒性的缺陷检测系统。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1304

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

快速了解UDP协议

互联网工程任务组(IETF)官员透露,HTTP-over-QUIC实验协议将重命名为HTTP/3,并有望成为HTTP协议的第三个正式版本。 Quic(QuickUDP Internet Connections)是一种新的传输方式,与TCP相比,它减少了延迟。表面上,Quic非常类似于在UDP上实现的TCP+TLS+HTTP/2。由于TCP是在操作系统内核和中间件固件中实现的,因此对TCP进行重大...

全菜工程师小辉的博客 6228

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

QQ 为什么以 UDP 协议为主,以 TCP 协议为辅?

QQ 为什么以 UDP 协议为主,以 TCP 协议为辅? 先问是不是,再问为什么? QQ既有UDP也有TCP! 不管UDP还是TCP,最终登陆成功之后,QQ都会有一个TCP连接来保持在线状态。这个TCP连接的远程端口一般是80,采用UDP方式登陆的时候,端口是8000。 UDP协议是无连接方式的协议,它的效率高,速度快,占资源少,但是其传输机制为不可靠传送,必须依靠辅助的算法来完成

时光荏苒心依旧的博客 1472

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

为什么QQ用的是UDP协议而不是TCP协议?

QQ既有UDP也有TCP! 不管UDP还是TCP,最终登陆成功之后,QQ都会有一个TCP连接来保持在线状态。这个TCP连接的远程端口一般是80,采用UDP方式登陆的时候,端口是8000。 UDP协议是无连接方式的协议,它的效率高,速度快,占资源少,但是其传输机制为不可靠传送,必须依靠辅助的算法来完成传输控制。QQ采用的通信协议以UDP为主,辅以TCP协议。由于QQ的服务器设计容量是海量级的应用...

ACAMPUS 9265

为什么QQ用的是UDP协议而不是TCP协议

点击关注,快速进阶高级架构师网友:网上找到的资料都是说QQ用的是UDP协议,但计算机网络里还有各种资料都提到它的不可靠性,请问有人知道原因吗,求解答!答:QQ既有UDP也有TCP!不管UDP还是TCP,最终登陆成功之后,QQ都会有一个TCP连接来保持在线状态。这个TCP连接的远程端口一般是80,采用UDP方式登陆的时候,端口是8000。UDP协议是无连接方式的协议,它的效率高,速度快,占资源少,但...

weixin_34357962的博客 898

写了一个网络聊天软件(Windows版UDP程序)

大家好,我是涛哥。 TCP网络编程是很重要的,那么,你有使用过UDP网络编程吗?部分朋友的第一反应是:UDP不可靠,所以实际很少用。 真的是这样吗?其实不然!对于很多内网通信而言,基本不存在时延和数据丢包的问题,而且有的应用场景要求并不高。 据我所知,在腾讯的QQ后台,就大量使用了UDP通信,而且并没有做应用层的可靠性保证,照样跑得好好的,没问题。 今天,我们以最简单的UDP编程为例,来实战一下网络编程,实现一个简单的聊天软件,你可以基于本文程序进行修改。 涛哥手绘 服务端程序 服务.

认知 行动 坚持 1299

java udp 语音_原来做的一个UDP语音聊天软件,用speex语音库

原来做的一个UDP语音聊天软件,用speex语音库.实现简单的IP连接聊天,效果一般,供学习用。简单说下UDP协议。UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规...

weixin_39522170的博客 525
上一篇: windows下搭建yaf框架
下一篇: 为PhpStorm添加Laravel 代码智能提示功能
susu_php
博客等级 码龄14年 3粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值