• 半成品


    import socket
    
    import struct
    from zlib import crc32
    
    
    def data_processing(data):
        # 解析数据
        head = struct.unpack(">4s", data[0:4])[0]  # 固定包头
        protocol_version = struct.unpack('>B', data[4:5])[0]  # 协议版本
        private_id = struct.unpack('>B', data[5:6])[0]  # 私有版本
        package_length = struct.unpack('>H', data[6:8])[0]  # 包长度
        print("固定包头: ", head, "协议版本: ", protocol_version, "私有版本: ", private_id, "私有数据包长度:   ", package_length, "校验: ",
              struct.unpack(">L", data[-4:])[0])
        analyzing_data(data[8:-4])
        return data[8:-4], private_id
    
    def analyzing_data(self, data):
        id_counter = struct.unpack(">H", data[0:1])[0]
        auto_or_manual = struct.unpack(">B", data[1:2])[0]
    
    def send_data(self, private_id, version = 1):
        """
            ["执行结果码", ">B", 1],
            ["已收到指令ID", ">H", 2],
            ["已完成指令ID", ">H", 2],
            ["X坐标", ">I", 4],
            ["Y坐标", ">H", 2],
            ["摄像头X坐标", ">H", 2],
            ["摄像头Y坐标", ">H", 2],
            ["摄像头Z坐标", ">H", 2],
            ["电池电量", ">B", 1],
            ["是否在充电", ">B", 1],
            ["避障传感器", ">H", 2],
            ["故障码", ">H", 2],
        """
        head = struct.pack('>4s', 'HXTX'.encode("utf-8"))  # 固定包头
        ver = struct.pack('>B', 1)  # 协议版本
        private = struct.pack('>B', private_id)  # 私有命令ID
    
        # 私有参数
        cmd_bytes = struct.pack(">B", 0)
        cmd_bytes += struct.pack(">H", )
        cmd_bytes += struct.pack(">H", )
        cmd_bytes += struct.pack(">I", 100)
        cmd_bytes += struct.pack(">H", 50)
        cmd_bytes += struct.pack(">H", 30)
        cmd_bytes += struct.pack(">H", 30)
        cmd_bytes += struct.pack(">H", 30)
        cmd_bytes += struct.pack(">B", 20)
        cmd_bytes += struct.pack(">B", 0)
        cmd_bytes += struct.pack(">H", 0)
        cmd_bytes += struct.pack(">H", 0)
        data_len = struct.pack(">H", len(cmd_bytes) + 4)  # 包长度
    
    
        package_data = head + ver + private + data_len + cmd_bytes
    
    
        """校验32bit"""
        check_crc32 = crc32(package_data)
        _crc32 = struct.pack('>L', check_crc32)
        return package_data + _crc32
    
    
    
    
    ip_port=('127.0.0.1',8081)
    udp_server_sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    udp_server_sock.bind(ip_port)
    
    
    
    while True:
        try:
            msg, addr=udp_server_sock.recvfrom(1024)
            print(msg)
            data_processing(msg)
            udp_server_sock.sendto(msg,addr)
        except Exception:
            pass
  • 相关阅读:
    get 方式获取ajax
    javascript 面试题目
    原生js 制作选项卡切换效果
    js 回到顶部效果
    php mysql
    浏览器高度 clientHeight 与scrollHeight offsetHeight
    js dom中删除子节点removeChild
    Javascript综合笔记
    Ka贪心大暴走
    Openjudge NOI题库 ch0111/t1794 集合加法
  • 原文地址:https://www.cnblogs.com/zhzhlong/p/10575871.html
Copyright © 2020-2023  润新知