028-86261949

当前位置:首页 > 技术交流 > python下socket编程之UDP编程

python下socket编程之UDP编程

2018/10/26 16:20 分类: 技术交流 浏览:35

1. 引言
python作为一门胶水语言,可以在各个领域上作为快速开发的工具,大大提高开发者处理事务的效率。在互联网行业中,不管是对网络服务器的开发,还是对网络客户端,例如爬虫的开发中,都会涉及到底层的运行原理,那就是socket编程,那么今天,我们将对python下的socket编程开发中的UDP协议编程过程做一个介绍,通过本篇文章,可以让大家对网络编程中底层的UDP协议有一定的认识。
 
2. 什么是UDP协议
UDP --- 用户数据报协议,是一个无连接的简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。
UDP是一种面向无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。
UDP是面向消息的协议,通信时不需要建立连接,数据的传输自然是不可靠的,UDP一般用于多点通信和实时的数据业务,比如:
n 发送小尺寸数据(如对DNS服务器进行IP地址查询时)
n 在接收到数据,给出应答较困难的网络中使用UDP。(如:无线网络)
n 适合于广播/组播式通信中。
n MSN/QQ/Skype等即时通讯软件的点对点文本通讯以及音视频通讯通常采用UDP协议
流媒体、VOD、VoIP、IPTV等网络多媒体服务中通常采用UDP方式进行实时数据传输
 
 
3. udp服务器编程
在python中,提供了一个socket模块,他里面封装了系统底层socket接口的python格式API,对于Python开发者来说,只需要导入该模块就可以实现socket编程了。
根据C/S模型的要求,首先应该先有一个服务器,等待客户端的请求,然后再根据请求内容给予服务,那么UDP的服务器的设计流程就是:
1. 申请对象:从内核中申请一个具有UDP特性的socket对象;
2. 配置结构:用元组结构来表示服务器要监听的端口和IP地址;
3. 绑定结构:使用bind系统调用,向内核告知开放哪个端口和哪些IP地址;
4. 等待数据:使用recvfrom来接收数据,若没有收到数据,阻塞等待;
 
import socket
 
# 申请对象,使用TCP/IP协议中的IP和UDP协议层
udp_client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 配置结构,监听所有IP网络,接收8899这个端口的数据
src_addr = ('', 8899)
# 绑定结构,通过bind把配置好的结构告知给内核
udp_client.bind(src_addr)
# 等待数据,以1K为单位接收UDP的数据
data, remote_addr = udp_server.recvfrom(1024)
print("获取到{}从{}".format(data.encode('utf-8'), remote_addr))
 
4. UDP客户端
有了服务器后,只需要设计一个客户端,向服务器发起请求,就完成了C/S的模型了。
那么UDP的客户端设计流程是:
1. 申请对象:从内核中申请一个具有UDP特性的socket对象;
2. 配置目标:作为客户端,需要知道服务器的身份信息,才可能向指定的地方发送数据;
3. 发送数据:使用sendto向目标地址发送数据;
import socket
 
# 申请对象
udp_server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 配置目的地的IP和端口
dest_addr = ('192.168.199.128', 8899)
# 调用sendto发送数据
udp_server.sendto('你好'.encode('utf-8'), dest_addr)
 
   感谢源码时代教学讲师提供此文章!
   本文为原创文章,转载请注明出处!
 
#标签:python,socket编程,UDP编程,源码时代