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通信

感谢作者:無負今日

 

posted on 2020-09-04 14:43  大王背我来巡山®  阅读(132)  评论(0)    收藏  举报