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、关闭网络连接;

为什么聊天软件一般采用UDP协议相关推荐

  1. QQ使用了什么通讯协议?为什么要这样做?为什么采用 UDP 协议,而不采用 TCP 协议实现?

    登陆采用TCP协议和HTTP协议,你和好友之间发送消息,主要采用UDP协议,内网传文件采用了P2P技术. QQ对于普通用户是采用UDP协议,对于会员用TCP协议 总来的说: 1.登陆过程,客户端cli ...

  2. 采用UDP协议实现PIC18F97J60 ethernet bootloader

    采用UDP协议实现PIC18F97J60 ethernet bootloader 了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloade ...

  3. 从入门到入土:基于C语言采用UDP协议实现远程控制|详细说明|利用流套接字实现一个简单的远程控制系统|代码展示

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  4. 从入门到入土:基于C语言采用UDP协议实现通信功能的程序

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  5. QQ为何采用UDP协议?

    https://blog.csdn.net/liusandian/article/details/52238939 登陆采用TCP协议和HTTP协议, 你和好友之间发送消息,主要采用UDP协议, 内网 ...

  6. java udp简单聊天程序_Java基于UDP协议实现简单的聊天室程序

    最近比较闲,一直在抽空回顾一些java方面的技术应用. 今天没什么事做,基于udp协议,写了一个非常简单的聊天室程序. 现在的工作,很少用到socket,也算是对java网络编程方面的一个简单回忆. ...

  7. java udp 聊天室_Java基于UDP协议实现简单的聊天室程序

    最近比较闲,一直在抽空回顾一些Java方面的技术应用. 今天没什么事做,基于UDP协议,写了一个非常简单的聊天室程序. 现在的工作,很少用到socket,也算是对Java网络编程方面的一个简单回忆. ...

  8. PC基于wifi采用UDP协议实现ESP32无线图传显示在1.44寸屏幕

    开发环境:Ubuntu16.04 ESP32:Arduino PC图传:Python3.6.9 首先上python代码 import socket import cv2 import numpy as ...

  9. Python多人聊天室-基于socket UDP协议

    简介 使用Python编写的基于socket UDP通信的多功能即时聊天室,包含Tkinter编写的图形化聊天界面,功能包括有账号注册和登录,登录成功后可以查看在线用户,并和聊天室内的其他在线用户聊天 ...

最新文章

  1. Oracle TO_YMINTERVAL 函数简介
  2. 【opencv系列03】OpenCV4.X视频捕获与显示
  3. 使用foreach循环遍历Collection集合
  4. python二级考试程序题批改_随机生成百以内加减乘除题目并批改
  5. PyCharm——Youki觉得好用的快捷键~
  6. 系统学习NLP(二十六)--BERT详解
  7. postman调试网站API接口提示需要先登录怎么办
  8. MATLAB-数据插值
  9. 【Hexo】Next主题添加全局播放翻页不间断的网易云音乐
  10. 论文阅读Targetless Calibration of LiDAR-IMU System Based on Continuous-time Batch Optimization(含代码解读)
  11. 单片机课程学习与感想
  12. 清华大学周伯文老师课题组招聘助理教授/博士后/工程师
  13. HTTP协议与XML
  14. macOS配置vim
  15. 在python中strip_Python中关于strip使用方法的小妙招
  16. 异步8月书讯:重磅新书《人工智能(第2版)》不可错过
  17. LCG(linear congruential generator)伪随机数生成器
  18. .netCHATING 10.4 for NET6-7.0-Crack
  19. [渗透教程]-004-嗅探工具-Nmap
  20. 带您走入Alteryx分析流程自动化(APA)的世界

热门文章

  1. icloud安装错误怎么办_怎么办?iCloud云备份失败该如何解决?
  2. C - Wrap very long lines of input into two or more shorter lines
  3. windows开机启动自定义程序和任务
  4. 爱普生WF7710WF7720WF3720升级固件导致墨盒不识别解决方法
  5. php 屏蔽搜索机器人,php实现判断访问来路是否为搜索引擎机器人的方法
  6. 常用的几种PPT做图小技巧!
  7. Qt数据库应用23-个人信息报表
  8. PNP三极管和NPN三极管的开关电路
  9. 计算机信息安全技术知识点简摘又名我的期末考试复习第一弹
  10. var和let的区别