1. UDP协议的特点

相比与TCP协议来说,UDP协议就显得相对比较简单了。
(1) UDP是无连接的
  即发送数据之前不需要建立连接(当然,发送数据结束时也没有连接可释放),因此减少了开销和发送数据之前的时延。
(2) UDP使用尽最大努力交付
  即不保证可靠交付(可能会丢包),因此主机不需要维持复杂的连接状态表(这里面有许多参数)。
(3) UDP是面向报文的
  发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。这就是说,应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。在接收方的UDP,对IP层交上来的UDP用户数据报,在去除首部后就原封不动地交付上层的应用进程。也就是说,UDP一次交付一个完整的报文。因此,应用程序必须选择合适大小的报文。若报文太长,UDP把它交给IP层后,IP层在传送时可能要进行分片,这会降低IP层的效率。反之,若报文太短,UDP把它交给IP层后,会使IP数据报的首部的相对长度太大,这也降低了IP层的效率。
(4) UDP没有拥塞控制
  因此网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用是很重要的。很多的实时应用(如IP电话、实时视频会议等)要求源主机以恒定的速率发送数据,并且允许在网络发生拥塞时丢失一些数据,但却不允许数据有太大的时延。UDP正好适合这种要求。
(5) UDP支持一对一、一对多、多对一和多对多的交互通信
(6) UDP的首部开销小
  只有8个字节,比 TCP的20个字节的首部要短。虽然某些实时应用需要使用没有拥塞控制的UDP,但当很多的源主机同时都向网络发送高速率的实时视频流时,网络就有可能发生拥塞,结果大家都无法正常接收。因此,不使用拥塞控制功能的UDP有可能会引起网络产生严重的拥塞问题。

2. UDP程序的编写

使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包。但是,能不能到达就不知道了。虽然用UDP传输数据不可靠,和TCP相比,它速度快,对于不要求可靠到达的数据,就可以使用UDP协议。
2.1 UDP程序

import sockets = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # SOCK_DGRAM代指UDP协议
s.bind(('127.0.0.1', 9999)) # 绑定端口while True:data, addr = s.recvfrom(1024)print('Received from %s:%s.' % addr)s.sendto(b'Hello, %s!' % data, addr)

2.2 验证
首先开启一个NetAssist,然后绑定UDP的8888端口,并开启。如下图所示:

接着我们运行程序,如下图所示:

再接着我们在NetAssist的远程主机那里填入要发生通信的主机ip和端口,这里我们填写127.0.0.1:9999,如下图所示:

最后发送数据,进行观察,如下图所示:

我们向127.0.0.1:9999发送了数据,9999端口的UDP程序收到了数据,并向8888端口的UDP发送了数据。

3. 写在最后

此处仅仅是编写了一个简单的UDP的demo而已。实际项目中肯定是更为复杂的,此处不再赘述,以期抛砖引玉。

5. 网络编程之UDP编程相关推荐

  1. C#网络编程之 UDP编程

    C# 网络编程 UDP 转载于:https://www.cnblogs.com/miniwiki/archive/2009/07/24/1709833.html

  2. udp java 编程_JAVA 网络编程之UDP编程

    多线程,网络编程,反射,集合是java语言的重头戏,其中反射是java一切框架的基石. 客户端: SocketAddress sa =new  InetSocketAddress("10.1 ...

  3. Qt网络编程之UDP编程练习(20200219)

    服务端 #include "widget.h" #include <QApplication> #include <QString> #include &l ...

  4. Python中的网络编程之UDP

    Python中的网络编程之UDP 文章目录 Python中的网络编程之UDP 一.Socket编程 `1.什么是客户端/服务器架构`? **`2.套接字:通信端点`** 3.套接字地址:主机-端口对 ...

  5. Java网络编程之NIO编程(待补充)

    Java网络编程之NIO编程(待补充) 学习网站1:http://ifeve.com/java-nio-all/ 学习网站2:http://www.ibm.com/developerworks/cn/ ...

  6. 萌新解--Java网络编程之UDP

    Java网络编程之UDP UDP协议为无连接的通信协议,在传数据前发送端与接收端不会先建立连接,也就是你发我就收但不一定会收到哦,以我们自身为发送端,我们不会事先让接收方知道我要给接收方发数据啦.就像 ...

  7. 1.6 网络编程之 UDP通信

    ************************************************** * 本文由小鸟飞飞整理发表 <samboy@sohu.com> * * 首发网站:蓝丽 ...

  8. Linux C高级编程——网络编程之UDP(4)

    Linux网络编程--UDP 宗旨:技术的学习是有限的,分享的精神是无限的. 下面分析一帧基于UDP的TFTP协议帧. 以太网首部 0000: 00 05 5d 67 d0 b1 00 05 5d 6 ...

  9. Java网络编程之UDP与TCP的网络编程

    ⭐️前面的话⭐️ 本文将介绍java中的网络编程,常见的网络编程方式有两种,一种是UDP,另外一种是TCP,其中UDP的服务器与客户端之间不需要建立连接就能进行通信,而TCP需要先建立服务器与客户端之 ...

最新文章

  1. Matlab数据的可视化 -- 平面多边形的着色
  2. 【算法与数据结构】最大子序列和问题
  3. 动点移动轨迹,猜猜这是曲线还是直线?
  4. Java_数组练习答案_Java数组练习题带答案.doc
  5. mybatis 关联查询 延迟加载
  6. python格式输出占四列左对齐_python – 打印字符串左对齐,固定宽度和后缀
  7. Algs4-1.2.14实现Transaction中的equals()方法
  8. JVM性能调优监控工具专题一:JVM自带性能调优工具(jps,jstack,jmap,jhat,jstat,hprof)...
  9. ubuntu中如何查看系统信息(uname)
  10. ADT(Android) — Eclipse开发NOX夜神安卓模拟器如何进行横竖屏切换
  11. python笔记-动态类型
  12. log添加 oracle redo_Oracle更改redo log大小 or 增加redo log组
  13. Eclipse中使用SVN教程
  14. 产品读书《定位:有史以来对美国营销影响最大的观念》
  15. c语言之图形编程 pdf,《C语言图形编程》.pdf
  16. php 百度地图 云存储,jspopular3.0 | 百度地图API SDK
  17. QT课程设计:C++英语单词记忆软件程序开发
  18. 第三方支付——微信web端支付(java)
  19. vue-cli项目配置文件分析
  20. java调用R 画词云

热门文章

  1. python设计一个长方形类_类设计模式python学习~元类
  2. GB28181协议--SIP协议介绍
  3. material studio使用perl脚本形成交联聚合物
  4. [zz]收藏的JAVA面试题大全
  5. 数据库驱动mysql-connector-java-5.1.46-bin.jar下载及在idea中导入该jar包
  6. 如何建设好智能工厂?
  7. IB数学TI nspire使用入门
  8. 【3维视觉】一文带你学习网格细分Mesh Subdivision算法(Loop, Butterfly, Modified Butterfly, Catmull-Clark, Doo-Sabin)
  9. MTK平台如何定位显示花屏和界面错乱等绘制异常的问题
  10. Matlab幅频曲线和滤波器设计