• Python网络编程之UDP编程



    一、前言

      UDP是面向消息的协议,如果通信时不需要建立连接,数据的传输自然是不可靠的,UDP一般用于多点通信和实时的数据业务,例如:

    • 语音广播
    • 视频
    • 聊天软件
    • TFTP(简单的文件传输)
    • SNMP(简单网络管理协议)
    • RIP(路由信息协议,如报告股票市场、航空信息)
    • DNS(域名解释)
        和TCP类似,使用UDP的通信双方也分为客户端和服务器

    二、创建UDP服务器

      UDP服务器不需要TCP服务器那么多的设置,因为他们不是面向连接的。除了等待传入的连接之外,几乎不需要做其他工作。下面我们来实现一个将摄氏度转化为华氏度的功能。

      例如,在客户端输入要转换的摄氏温度,然后发送个服务器,服务器根据转化公式,将摄氏温度转化为华氏度,发送给客户端显示。创建udp_server.py文件,实现UDP服务器。具体代码如下:

    # -*- coding: utf-8 -*-
    import socket  # 导入socket模块
    
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  # 创建UDP套接字
    s.bind(("127.0.0.1", 8888))  # 绑定地址(host,port)到套接字
    print("绑定UDP到8888端口")
    data, addr = s.recvfrom(1024)  # 接收数据
    data = float(data) * 1.8 + 32  # 转换公式
    send_data = "转换后的温度(单位:华氏度):" + str(data)
    print("Received from %s:%s." % addr)
    s.sendto(send_data.encode(), addr)  # 发送给客户端
    s.close()  # 关闭服务器端套接字
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

      上述代码中,使用socket.socket()函数创建套接字,其中设置参数为socket.SOCK_DGRAM,表明创建的是UDP套接字。此外需要注意,s.recvfrom()函数生成的data数据类型是byte,不能直接进行四则运算,需要将其转化为float浮点型数据。最后在使用sendto()函数发送数据时,发送的数据必须是byte类型,所以需要使用encode()函数将字符串转化为byte类型。

      运行结果如图所示:

    在这里插入图片描述


    三、创建UDP客户端

      创建一个UDP客户端程序的流程很简单,具体步骤如下:

    • 创建客户端套接字
    • 发送/接收数据
    • 关闭套接字

      下面根据上面的实例,创建udp_client.py文件,实现UDP客户端,用户接收转换后的华氏温度。具体代码如下:

    # -*- coding: utf-8 -*-
    import socket  # 导入socket模块
    
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  # 创建UDP套接字
    data = input("请输入要转换的温度(单位:摄氏度):")  # 输入要转换的温度
    s.sendto(data.encode(), ("127.0.0.1", 8888))  # 发送数据
    print(s.recv(1024).decode())  # 打印接收数据
    s.close()  # 关闭套接字
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

      在上述代码中,主要就是接收的数据和发送的数据类型都是byte,所以发送时,使用encode()函数将字符串转化为byte。而输出时,使用decode()函数将byte类型数据转换为字符串,方便用户阅读。

      分别运行udp_server.py和udp_client.py文件,然后在udp_client.py窗口输入要转换的摄氏度,udp_client.py窗口会立即显示转化后的华氏温度。如图所示:

    在这里插入图片描述

    在这里插入图片描述


    四、执行UDP服务器和客户端

      在UDP通信模型中,在通信开始之前,不需要建立相关的连接,只需要发送数据即可,类似于生活中的“写信”。UDP通信模型如下图所示:

    在这里插入图片描述


    Python练一练

  • 相关阅读:
    IDEA 集成 Git
    openresty 性能优化
    PowerPoint 教程,如何在 PowerPoint 中添加水印?
    走进人工智能|自动驾驶 开启智能出行新时代
    pytorch深度学习实战lesson12
    [Java安全]—再探Filter内存马
    教育行业SaaS应用管理平台解决方案:助力企业实现经营、管理一体化
    【Linux】《Linux命令行与shell脚本编程大全 (第4版) 》笔记-Chapter19-初识 sed 和 gawk
    vite脚手架简单使用
    java - 数据结构,时间复杂度和空间复杂度
  • 原文地址:https://blog.csdn.net/weixin_45191386/article/details/126432291