5. 网络编程之UDP编程
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编程相关推荐
- C#网络编程之 UDP编程
C# 网络编程 UDP 转载于:https://www.cnblogs.com/miniwiki/archive/2009/07/24/1709833.html
- udp java 编程_JAVA 网络编程之UDP编程
多线程,网络编程,反射,集合是java语言的重头戏,其中反射是java一切框架的基石. 客户端: SocketAddress sa =new InetSocketAddress("10.1 ...
- Qt网络编程之UDP编程练习(20200219)
服务端 #include "widget.h" #include <QApplication> #include <QString> #include &l ...
- Python中的网络编程之UDP
Python中的网络编程之UDP 文章目录 Python中的网络编程之UDP 一.Socket编程 `1.什么是客户端/服务器架构`? **`2.套接字:通信端点`** 3.套接字地址:主机-端口对 ...
- Java网络编程之NIO编程(待补充)
Java网络编程之NIO编程(待补充) 学习网站1:http://ifeve.com/java-nio-all/ 学习网站2:http://www.ibm.com/developerworks/cn/ ...
- 萌新解--Java网络编程之UDP
Java网络编程之UDP UDP协议为无连接的通信协议,在传数据前发送端与接收端不会先建立连接,也就是你发我就收但不一定会收到哦,以我们自身为发送端,我们不会事先让接收方知道我要给接收方发数据啦.就像 ...
- 1.6 网络编程之 UDP通信
************************************************** * 本文由小鸟飞飞整理发表 <samboy@sohu.com> * * 首发网站:蓝丽 ...
- Linux C高级编程——网络编程之UDP(4)
Linux网络编程--UDP 宗旨:技术的学习是有限的,分享的精神是无限的. 下面分析一帧基于UDP的TFTP协议帧. 以太网首部 0000: 00 05 5d 67 d0 b1 00 05 5d 6 ...
- Java网络编程之UDP与TCP的网络编程
⭐️前面的话⭐️ 本文将介绍java中的网络编程,常见的网络编程方式有两种,一种是UDP,另外一种是TCP,其中UDP的服务器与客户端之间不需要建立连接就能进行通信,而TCP需要先建立服务器与客户端之 ...
最新文章
- Matlab数据的可视化 -- 平面多边形的着色
- 【算法与数据结构】最大子序列和问题
- 动点移动轨迹,猜猜这是曲线还是直线?
- Java_数组练习答案_Java数组练习题带答案.doc
- mybatis 关联查询 延迟加载
- python格式输出占四列左对齐_python – 打印字符串左对齐,固定宽度和后缀
- Algs4-1.2.14实现Transaction中的equals()方法
- JVM性能调优监控工具专题一:JVM自带性能调优工具(jps,jstack,jmap,jhat,jstat,hprof)...
- ubuntu中如何查看系统信息(uname)
- ADT(Android) — Eclipse开发NOX夜神安卓模拟器如何进行横竖屏切换
- python笔记-动态类型
- log添加 oracle redo_Oracle更改redo log大小 or 增加redo log组
- Eclipse中使用SVN教程
- 产品读书《定位:有史以来对美国营销影响最大的观念》
- c语言之图形编程 pdf,《C语言图形编程》.pdf
- php 百度地图 云存储,jspopular3.0 | 百度地图API SDK
- QT课程设计:C++英语单词记忆软件程序开发
- 第三方支付——微信web端支付(java)
- vue-cli项目配置文件分析
- java调用R 画词云
热门文章
- python设计一个长方形类_类设计模式python学习~元类
- GB28181协议--SIP协议介绍
- material studio使用perl脚本形成交联聚合物
- [zz]收藏的JAVA面试题大全
- 数据库驱动mysql-connector-java-5.1.46-bin.jar下载及在idea中导入该jar包
- 如何建设好智能工厂?
- IB数学TI nspire使用入门
- 【3维视觉】一文带你学习网格细分Mesh Subdivision算法(Loop, Butterfly, Modified Butterfly, Catmull-Clark, Doo-Sabin)
- MTK平台如何定位显示花屏和界面错乱等绘制异常的问题
- Matlab幅频曲线和滤波器设计