UDP 的英文单词是User Datagram Protocol,缩写为UDP,是一种用户数据报协议,又称为用户数据报文协议,是一种报文的协议,是一个简单的面向数据报的传输层协议。UDP的发起和接受是不需要经过连接的,仅仅只需要发送在对应端口上进行监听接受即可,不需要两个客户端一定是连接的。
这里大家要区别的是:另一种常用的通信协议是TCP协议,两者的区别是TCP是面向连接的、传输可靠的,UDP是面向数据报的、不可靠的。它一旦把数据发送出去,就不保留备份数据,发出去的数据有没有被收到也不进行校验,容易丢包。
虽然用UDP传输数据不可靠,但它的优点是和TCP比,速度快,对于不要求可靠到达的数据,就可以使用UDP协议。
我们将发送端和接收端的IP和Port提取到常量进行配置
首先我们准备发送端代码:
Send.py
# -*- coding: utf-8 -*- import socket import time #client 发送端 client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) PORT = 8000 RECEIVER_IP="192.168.134.233" while True: start = time.time() #获取当前时间 print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(start))) #以指定格式显示当前时间 msg=input("本客户端192.168.43.131,请输入要发送的内容:") server_address = (RECEIVER_IP, PORT) # 接收方 服务器的ip地址和端口号 client_socket.sendto(msg.encode(), server_address) #将msg内容发送给指定接收方 now = time.time() #获取当前时间 run_time = now-start #计算时间差,即运行时间 print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(now))) print("run_time: %d seconds\n" %run_time)
再准备接收端代码:
Receive.py
# -*- coding: utf-8 -*- import socket #导入socket模块 import time #导入time模块 #server 接收端 # 设置服务器默认端口号 PORT = 8000 #设置本地IP地址 LOCAL_IP="192.168.134.233" # 创建一个套接字socket对象,用于进行通讯 # socket.AF_INET 指明使用INET地址集,进行网间通讯 # socket.SOCK_DGRAM 指明使用数据协议,即使用传输层的udp协议 server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) address = (LOCAL_IP, PORT) server_socket.bind(address) # 为服务器绑定一个固定的地址,ip和端口 server_socket.settimeout(10) #设置一个时间提示,如果10秒钟没接到数据进行提示 while True: #正常情况下接收数据并且显示,如果10秒钟没有接收数据进行提示(打印 "time out") #当然可以不要这个提示,那样的话把"try:" 以及 "except"后的语句删掉就可以了 try: now = time.time() #获取当前时间 # 接收客户端传来的数据 recvfrom接收客户端的数据,默认是阻塞的,直到有客户端传来数据 # recvfrom 参数的意义,表示最大能接收多少数据,单位是字节 # recvfrom返回值说明 # receive_data表示接受到的传来的数据,是bytes类型 # client 表示传来数据的客户端的身份信息,客户端的ip和端口,元组 receive_data, client = server_socket.recvfrom(1024) print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(now))) #以指定格式显示时间 print("来自客户端%s,发送的%s\n" % (client, receive_data.decode())) #打印接收的内容 except socket.timeout: #如果10秒钟没有接收数据进行提示(打印 "time out") print("time out")
打开发送端程序

打开接收端程序

然后就可以在发送段输入要发送的内容,在接收端会获得相应的内容

参考文章:
UDP通信——使用python实现简单的UDP通信
感谢作者:無負今日
浙公网安备 33010602011771号