Python 使用proto 发送socket数据

import socket
import binascii
import struct
from SensingMonitoring_pb2 import Command, CommandNames

if __name__ == "__main__":
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.connect(("192.168.1.100", 22295))

    # 发送数据
    command = Command()
    command.COMMANDID = 45678
    command.COMMANDNAME = CommandNames.Value('AuthentcationRequest')
    command.AuthentcationRequest.VERSION = '1.0'
    command.AuthentcationRequest.DWBH = 'xxxxxxxxxx'
    command.AuthentcationRequest.LWRZBH = 'xxxxxxxxxxxxxxxxx'
    message = command.SerializeToString()

    # 包体长度,先打包为字节符 再转16进制
    lenght = struct.pack('<I', len(message)).hex()

    # 包体
    message = binascii.hexlify(message).decode()

    # 包头, 打包为一个 4 字节的小端字节序的字节串。这里的 '<I' 是格式字符串,其中 < 表示小端字节序,I 表示一个无符号整数,占用 4 个字节,将字节串转换为其十六进制
    head = struct.pack('<I', 58250).hex()

    client.send(bytes.fromhex(head + lenght + message))
    # 接收响应数据
    data = client.recv(1024)
    data = binascii.hexlify(data).decode()

    # 包头
    head = bytes.fromhex(data[:8])
    head = struct.unpack('<I', head)[0]

    # 包体长度
    length = bytes.fromhex(data[8:16])
    length = struct.unpack('<I', length)[0]

    # 包体,十六进制字符串转换为对应的字节串
    body = bytes.fromhex(data[16:])
    result = {
        "Flag": head,
        "BodySize": length,
        "Body": body
    }

    command = Command()
    command.ParseFromString(body)
    print(command)
    print(command.AuthentcationResponse.INFO)
    
    client.close()

在这里插入图片描述

相关推荐

  1. python使用socket服务发送接收图像

    2024-07-12 12:54:07       51 阅读
  2. Socket通讯使用的坑-消息合并发送

    2024-07-12 12:54:07       58 阅读
  3. Socket通讯使用的坑-消息合并发送-解决方法

    2024-07-12 12:54:07       57 阅读
  4. python使用rabbitmq发送消息和接收消息数据

    2024-07-12 12:54:07       43 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 12:54:07       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 12:54:07       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 12:54:07       58 阅读
  4. Python语言-面向对象

    2024-07-12 12:54:07       69 阅读

热门阅读

  1. vim删除多行

    2024-07-12 12:54:07       25 阅读
  2. 嵌入式裸机开发与 Linux 开发

    2024-07-12 12:54:07       22 阅读
  3. 机器学习-分类器-总结

    2024-07-12 12:54:07       19 阅读
  4. Git-如何基于某个tag创建一个新分支

    2024-07-12 12:54:07       27 阅读
  5. 【Linux】Vim 使用教程

    2024-07-12 12:54:07       17 阅读
  6. Hive中的数据类型和存储格式总结

    2024-07-12 12:54:07       21 阅读
  7. modern C++:闭包与匿名函数

    2024-07-12 12:54:07       23 阅读
  8. 前缀,中缀,后缀表达式

    2024-07-12 12:54:07       22 阅读
  9. 笔记:如何使用Microsoft.Extensions.Options

    2024-07-12 12:54:07       30 阅读
  10. socket编程(1)

    2024-07-12 12:54:07       30 阅读
  11. stm32flash一键ISP烧录单片机

    2024-07-12 12:54:07       20 阅读