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
您可能感兴趣
- docker网络有哪些模式(Docker网络原理及自定义网络详细解析)
- vscode快速生成html框架(VSCode 自定义html5模板的实现)
- dedecms自定义联动类别方法(DEDECMS点击主栏目默认显示第一个子栏目列表的方法)
- laravel api 调试(Laravel框架自定义公共函数的引入操作示例)
- dedecms自定义函数(DEDECMS相关文章以关键字相关的修改方法自定义函数)
- vue3.0 自定义组件(Vue 3.0自定义指令的使用入门)
- laravel自定义使用方法(laravel 修改.htaccess文件 重定向public的解决方法)
- 织梦cms模块使用方法(织梦CMS文章模型文章转入新的自定义模型的方法)
- laravel自定义命令(laravel-admin select框默认选中的方法)
- sqlserver查询自定义时间数据(SQLServer查询某个时间段购买过商品的所有用户)
- asp.net自定义分页控件
- python 自定义获取文件目录(Python使用os.listdir和os.walk获取文件路径与文件下所有目录的方法)
- dedecms 自定义字段(dedecms自定义模型提示:Call to a member function GetInnerText的解决方法)
- mysql 自定义排序
- pycharm如何自定义模板(对Pycharm创建py文件时自定义头部模板的方法详解)
- thinkphp5框架怎么设置(thinkphp5框架调用其它控制器方法 实现自定义跳转界面功能示例)
- NVIDIA显卡份额冲上88 A饭发愁 游戏优化恐没A卡份了(NVIDIA显卡份额冲上88A饭发愁)
- AMD YES A卡还是N卡 A卡和N卡的区别(AMDYESA卡还是N卡)
- 以后显卡多了一个新选择,N卡和A卡外又多了个I卡(以后显卡多了一个新选择)
- 读卖乐园的彩灯(读卖乐园的彩灯)
- 新疆80后在淘宝卖干果 以前是 不务正业 如今帮乡亲致富(新疆80后在淘宝卖干果)
- 弄清楚了销 售 买 卖这四个字,母婴生意做起来就没那么难了(弄清楚了销售买)
热门推荐
- 为什么dede主页加载不出来(dede中第一次登陆密码错误的解决方法)
- 图片热点链接的设置
- mysql子查询用法(MySQL 子查询和分组查询)
- python读取和写入数据excel(Python向excel中写入数据的方法)
- pythonselenium自动选框(python selenium 弹出框处理的实现)
- nginx反向代理及原理(传说中的反向代理,Nginx+Apache软件配置Web服务器)
- mvc JavaScriptResult的用法
- es6新增语法以及用法(ES6 解构赋值的原理及运用)
- nginx404错误页面设置(Nginx tp3.2.3 404问题解决方案)
- python3列表的使用教程(对Python3 pyc 文件的使用详解)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9