我们先介绍一下UDP
UDP — 用户数据报协议,是一个无连接的简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。
UDP特点:
UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。 UDP传输数据时有大小限制,每个被传输的数据报必须限定在64KB之内。 UDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方。
udp网络程序-发送数据 流程
客户端
- 创建客户端套接字
- 发送/接收数据
- 关闭套接字
举例说明:
import socket
# 1. 创建套接字
udpsocket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 2. 准备接收方的地址
udpadd=('192.168.1.67',8080)
# 3.从键盘获取数据
udpData=input('请输入发送的信息:')
# 4.发送
udpsocket.sendto(udpData.encode('utf-8'),udpadd)
# 5.关闭
udpsocket.close()
udp网络程序-接收数据
import socket
# 1. 创建套接字
udpsocket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 接收
while True:
data_info,ip_info = udpsocket.recvfrom(1024)
print(data_info.decode('gbk'))
print(ip_info)
# 3、关闭套接字
udpsocket.close()
此时端口号是随机的,我们也可以绑定端口比如像110一样有固定的端口
import socket
# 1. 创建套接字
udpsocket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#绑定本地
udpsocket.bind(('',8082))
# 接收
data_info,ip_info = udpsocket.recvfrom(1024)
print(data_info.decode('gbk'))
print(ip_info)
# 3、关闭套接字
udpsocket.close()
总结:
一个udp网络程序,可以不绑定,此时操作系统会随机进行分配一个端口,如果重新运行次程序端口可能会发生变化
一个udp网络程序,也可以绑定信息(ip地址,端口号),如果绑定成功,那么操作系统用这个端口号来进行区别收到的网络数据是否是此进程的