• python编解码16进制码流


    python编解码16进制码流

    目前在做python + vue写网站,最近遇到了用python代码编解码16进制的码流,与c语言程序进行交互

    自己写了一个简易版的客户端与服务端的python代码,利用到了 struct socket库,因为使用的是udp,所以就简单的调用一下库

    服务端代码

    import socket
    import struct
    
    # 创建UDP套接字
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    server_address = ('localhost', 9999)
    
    # 绑定地址和端口
    server_socket.bind(server_address)
    
    while True:
        print('Waiting for data...')
        data, client_address = server_socket.recvfrom(1024)
        
        # 打印接收到的原始数据的16进制码流
        print(f'Received raw data: {data.hex()}')
        
        # 解析收到的数据
        name, age = struct.unpack('BB', data)  # 'BB'表示两个unsigned char
        
        # 修改数据
        name = (name + 1) % 256
        age = (age + 1) % 256
        
        # 重新打包数据
        modified_data = struct.pack('BB', name, age)
        
        # 打印修改后的数据的16进制码流
        print(f'Modified data: {modified_data.hex()}')
        
        # 发送修改后的数据回客户端
        server_socket.sendto(modified_data, client_address)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    客户端代码

    import socket
    import struct
    
    # 创建UDP套接字
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    server_address = ('localhost', 9999)
    
    # 构建数据结构并打包
    name = 100
    age = 25
    data = struct.pack('BB', name, age)
    
    # 打印发送的数据的16进制码流
    print(f'Sending data: {data.hex()}')
    
    # 发送数据
    client_socket.sendto(data, server_address)
    
    # 接收服务端响应
    modified_data, server_address = client_socket.recvfrom(1024)
    
    # 打印服务端响应的数据的16进制码流
    print(f'Received modified data: {modified_data.hex()}')
    
    # 解析服务端响应的数据
    modified_name, modified_age = struct.unpack('BB', modified_data)
    
    print(f'Modified Name: {modified_name}')
    print(f'Modified Age: {modified_age}')
    
    # 关闭套接字
    client_socket.close()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    定时器(apscheduler)定时发送

    加上定时器之后服务端代码是一样的, 客户端代码我设定的是10s发送一次

    代码如下:

    import socket
    import struct
    from apscheduler.schedulers.background import BackgroundScheduler
    
    def send_data():
        # 构建数据结构并打包
        name = 100
        age = 25
        data = struct.pack('BB', name, age)
        
        # 打印发送的数据的16进制码流
        print(f'Sending data: {data.hex()}')
        
        # 发送数据
        client_socket.sendto(data, server_address)
    
    # 创建UDP套接字
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    server_address = ('localhost', 9999)
    
    # 创建后台调度器
    scheduler = BackgroundScheduler()
    scheduler.start()
    
    # 添加定时发送数据的任务,每10秒执行一次
    scheduler.add_job(send_data, 'interval', seconds=10)
    
    try:
        # 阻塞主线程,等待任务执行
        while True:
            pass
    except KeyboardInterrupt:
        # 捕获Ctrl+C信号,停止调度器并关闭套接字
        scheduler.shutdown()
        client_socket.close()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
  • 相关阅读:
    【Python】基础数据结构:列表——元组——字典——集合
    图片怎么转换成PDF格式?这两种方法赶紧记下
    力扣练习——67 森林中的兔子
    web前端面试题附答案007-面试官问DOCTYPE声明你要注意啦
    OSPF —— 优化配置
    已更新!宝藏教程!MYSQL-第六章节多表查询(一对一,多对多,一对多),连接查询(内,外连接),联合查询,子查询 代码例题详解这一篇就够了(附数据准备代码)
    28.java中的集合框架的相关面试题[20220730]
    DDD 洋葱架构才是 yyds!阿里大牛手记(DDD)领域驱动设计应对之道
    html中如何给input输入框这个一个默认值
    DDD进阶_领域设计的分层架构
  • 原文地址:https://blog.csdn.net/qq_44139121/article/details/138198587