python开源协议简介(对python 自定义协议的方法详解)
类别:脚本大全 浏览量:2846
时间:2022-03-31 12:06:30 python开源协议简介
对python 自定义协议的方法详解前面说到最近在写python的一些东西,然后和另外一位小伙伴定义了协议,然后昨天我有一部分东西没理解对,昨天上午我自己重写了一遍接收和发送的全部逻辑,昨天下午补了压力测试的脚本,自测没问题之后告知联调的小伙伴。
结果上午还是出了一点问题,然后我们两对代码,他写了一个python的实现。还好最后我这边没问题。(我也害怕是我这边出问题啊,所以我自己的代码都自己检查了好几遍)
简单放一下他的实现:
|
import struct import ctypes class E(Exception): def __init__( self , what): self .what = what def __str__( self ): return self .what def unmarshall_packet(pk): if len (pk) < 12 : raise E( "Invalid pk header" ) size, uri, prop_count = struct.unpack( "<III" , pk[: 12 ]); print "size:%d uri:%d prop_count:%d" % (size, uri, prop_count) if len (pk) - 12 ! = size - 8 : raise E( "Invalid pk length" ) ss = pk[ 12 :] offset = 0 for x in range ( 0 , prop_count): # Pop key key_size, = struct.unpack_from( "<I" , ss, offset) print "key_size:%d" % (key_size,) offset + = 4 key, = struct.unpack_from( "<%ds" % (key_size - 1 ,), ss, offset) offset + = key_size # Pop value val_size, = struct.unpack_from( "<I" , ss, offset) offset + = 4 print "val_size:%d" % (val_size,) val, = struct.unpack_from( "<%ds" % (val_size - 1 ,), ss, offset) offset + = val_size print "key:%s val:%s" % (key, val) key1 = "key1" val1 = "val1" key2 = "key2" val2 = "val2" offset = 0 ss = ctypes.create_string_buffer( 9085 ) struct.pack_into( "<III" , ss, 0 , 8 + 4 + len (key1) + len (val1) + len (key2) + len (val2) + 16 , 2 , 2 ) offset + = 12 struct.pack_into( "<I%dscI%dscI%dscI%dsc" % ( len (key1), len (val1), len (key2), len (val2)), ss, offset, len (key1) + 1 , key1, '\0' , len (val1) + 1 , val1, '\0' , len (key2) + 1 , key2, '\0' , len (val2) + 1 , val2, '\0' ) offset + = len (key1) + len (val1) + len (key2) + len (val2) + 4 + 16 unmarshall_packet(ss[:offset]) """ hex = "" ss = bytearray.fromhex( hex ) unmarshall_packet(ss) |
有很多可以学习的地方
一个是python 的 struct 对 bytearray 的操作真是舒服,直接放进去就可以了(之前我有不少东西都是徒手解的,回头再用这个优化下自己的代码吧。)
另外一个是vi写代码真是直接方便
要说缺点的话,应该是用私有协议,没有第三方工具可以作为公证,例如postman之类的。
以上这篇对python 自定义协议的方法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持开心学习网。
原文链接:https://blog.csdn.net/yeshennet/article/details/77238393
您可能感兴趣
- asp.net自定义分页控件
- mysql高级变量查询(MySQL 使用自定义变量进行查询优化)
- dedecms标签怎么调用(Dedecms自定义表单“数据校验不对,程序返回错误”的解决方法)
- sql server 自定义函数
- django过滤器(django 自定义过滤器的实现)
- laravel事务状态(laravel dingo API返回自定义错误信息的实例)
- 如何使用自定义discuz代码(Apache,IIS下Discuz x1.5伪静态设置方法)
- MySQL自定义函数
- 服务器启动nginx服务的命令(Nginx服务器添加Systemd自定义服务过程解析)
- dockerfile镜像案例(Dockerfile构建自定义镜像的实现)
- mysql 自定义排序
- oracle自定义异常
- 织梦列表页分页怎么用(织梦首页和列表页怎么调用自定义字段)
- python线程池怎么设置(python自定义线程池控制线程数量的示例)
- 宝塔主机怎样设置404页面(宝塔面板自定义404错误页面的设置方法)
- 微信小程序中的代码怎么编辑(微信小程序新手入门之自定义组件的使用)
- 淘宝支持账号名修改,网友 终于可以 重新做人 了(淘宝支持账号名修改)
- 盘点那些年让人称奇的年终奖 最后一个赢辣条毫无悬念(盘点那些年让人称奇的年终奖)
- 你还没有升职吗 他竟因为几套激励理论,升职了(你还没有升职吗)
- 某知名企业绩效管理体系及薪酬分配体系操作手册(某知名企业绩效管理体系及薪酬分配体系操作手册)
- 职场人改不掉这4个习惯,只会越混越穷,一辈子也翻不了身(职场人改不掉这4个习惯)
- 华为 联想等46家公司笔试面试题,涉及各行各业,建议收藏(联想等46家公司笔试面试题)
热门推荐
- sqlserver2012卸载工具(Windows下SQL Serever 2012彻底卸载删除教程)
- apache配置详解(apache2.2和php5.2.17在windows下整合过程的错误解决方法)
- 云服务器与服务器的区别(云服务器与网站空间区别在于什么)
- mysqlcount使用方法(详解 MySQL中count函数的正确使用方法)
- 云服务器的优点(云服务器都有哪些特点和优势)
- layui触碰提示框(layui禁用侧边导航栏点击事件的处理方法)
- vue调用组件内部的方法(Vue如何实现组件间通信)
- sql中where和having可以同时用吗(SQL where条件和jion on条件的详解及区别)
- css 圆角切换(CSS实现反方向圆角的示例代码)
- 如何打开docker容器端口号(Docker容器网络端口配置过程详解)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9