IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 使用 Python 来搭建 UDP 服务器 -> 正文阅读

[网络协议]使用 Python 来搭建 UDP 服务器

使用 Python 来搭建 UDP 服务器

使用 python 的 socket 模块,很容易快速搭建 udp 服务器,以便完成业务的需求,下面就来通过代码展示这种便捷性

搭建 UDP Server

import socket

# AF_INET 表示使用IPv4, SOCK_DGRAM 则表明数据将是数据报(datagrams)
udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

udp.bind(('0.0.0.0', 1777))

while True:
    rec_msg, addr = udp.recvfrom(1024)
    client_ip, client_port = addr
    print('client_ip:', client_ip, 'client_port:', client_port)

    print('msg from client:', rec_msg.decode('utf8'))

    ack_msg = 'Hello, udp client.'
    udp.sendto(ack_msg.encode('utf8'), addr)
  • 使用 udp.bind() 方法绑定 ip 和 port
  • 通过 udp.recvfrom() 方法来收取客户端发送的 udp 消息(该方法是阻塞的,直到有消息来才能够向下执行)
  • 可以在 addr 中获取到 client_ip, client_port,你可以自行记录,以便 server 和 不同的 client 进行通信
  • 收取到的消息使用 decoce() 方法解码,可以得到对应的字符串消息
  • 使用 udp.sendto() 方法可以将消息发送到对应的客户端

UDP Client

import socket

# AF_INET 表示使用IPv4, SOCK_DGRAM 则表明数据将是数据报(datagrams)
udp_client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

client_msg = 'Hello udp server.'

udp_client.sendto(client_msg.encode('utf8'), ('127.0.0.1', 1777))

while True:
    rec_msg, addr = udp_client.recvfrom(1024)
    print('msg form server:', rec_msg.decode('utf8'))

该段代码是客户端模拟发送 udp 消息,以及收取 server 的响应消息,其中相关的方法,可以参考上面的描述

用 16 进制来收发消息

如果你使用 16 进制来收发消息,可能希望在编码的时候就使用 “16 进制字符串”表示,发送时再将该 “16 进制字符串”消息转码成真正的 16 进制,可能会使用到如下的工具方法

import re
import struct


def msg_to_hex(msg):
    """
    将字符串消息转换成16进制消息
    """

    hex_msg = b""

    # 分割字符串,按照两个字符作为一个项
    for item in re.findall(r'.{2}', msg):
        # 字符串转换成 16 进制
        hex_str = int(item, 16)
        # 转换成字节表示
        hex_msg += struct.pack('B', hex_str)

    return hex_msg


def hex_to_msg(hex_msg):
    """
    将16进制消息转换成字符串消息
    """

    msg = ''.join(['%02x' % h for h in hex_msg])
    return msg
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-07-27 16:35:43  更:2021-07-27 16:37:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 12:28:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码