UDP网络编程实战
基于socket库,socket是Python3的标准库。搭建一个简易的服务器与客户端,让他们之间做简单的数据交互。
1.UDP数据传输流程
UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
UDP协议与TCP协议一样用于处理数据包,在OSI模型中,两者都位于传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。
因为UDP报头使用两个字节存放端口号,所以端口号的有效范围是从0到65535。一般来说,大于49151的端口号都代表动态端口。UDP端口号指定有两种方式:由管理机构指定端口和动态绑定的方式。
在选择UDP作为传输协议时必须要谨慎。在网络质量令人十分不满意的环境下,UDP协议数据包丢失会比较严重。但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。比如我们聊天用的ICQ和QQ就是使用的UDP协议,广播和多播也可用UDP。
UDP没有TCP的“三次握手”,不能保证数据正确送达,但是可以建立多连接,速度快,资源消耗小
2.服务端构建
#Authors:xiaobei
######服务端构建#####
import socket
#创建一个socket
server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#绑定IP
#IP隐藏,大家可以用自己IP,为安全考虑
server.bind(("*****(IP)******",8080))
print("服务器已启动")
#进入事件循环
while True:
#接收数据
data,clientAddress = server.recvfrom(1024)
print("%s发来数据:%s"%(str(clientAddress),data.decode("utf-8")))
#发送数据
data = input("请输入响应数据:")
server.sendto(data.encode("utf-8"),clientAddress)
print("已发送")
大家可以用自己IP,为安全考虑
3.客户端的创建
#Authors:xiaobei
######客户端创建######
import socket
#创建一个socket
client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
while True:
#发送数据
data = input("请输入发送数据:")
client.sendto(data.encode("utf-8"),("******(IP)******",8080))
print("已发送")
#接收数据
answer = client.recv(1024).decode("utf-8")
print("服务器响应数据",answer)
4.本机IP查找
打开cmd,输入“ipconfig",可以得到本机的IP。
>>>ipconfig