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
您可能感兴趣
- wordpress如何在文章中自定义html(wordpress添加Html5的表单验证required方法小结)
- thinkphp控制器怎么设置自定义(Thinkphp5.0 框架实现控制器向视图view赋值及视图view取值操作示例)
- vue组件轮播(vue+rem自定义轮播图效果)
- dedecms无缩略图怎么设置(DEDECMS系统分页标签自定义二次开发实例)
- axios调用接口(如何实现axios的自定义适配器adapter)
- sqlserver安装使用教程(SQL Server 2019下载与安装教程自定义安装)
- app开发自定义导航栏(AmazeUI底部导航栏与分享按钮的示例代码)
- django用户上传文件怎么接收(Django框架文件上传与自定义图片上传路径、上传文件名操作分析)
- thinkphp5.1手动连接mysql数据库(thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例)
- mysql8.0自定义安装图解(M1芯片安装mysql8.0数据库的实现步骤图文)
- php微信公众号管理后台(php实现微信公众号创建自定义菜单功能的实例代码)
- vue2.0自定义指令(vue2实现provide inject传递响应式)
- dedecms自定义表单验证码(dedecms织梦验证码无法正常显示的3种解决办法)
- html5中table属性(Html5之自定义属性data-,dataset)
- python开源协议简介(对python 自定义协议的方法详解)
- mysql自定义安装教程5.7(MySQL系列-源码编译安装v5.7.34)
- ()
- 张勇 阿里新任掌门人(阿里新任掌门人)
- 毛戈平全国第一柜花落银泰 高端国货迎来 高光 时刻(毛戈平全国第一柜花落银泰)
- 14岁丧父 20岁丧母,从苦难走向辉煌的银泰创始人沈国军(14岁丧父20岁丧母从苦难走向辉煌的银泰创始人沈国军)
- 银泰集团董事长沈国军获评 北京影响力 十大企业家(银泰集团董事长沈国军获评)
- 15帅气男士发型,清爽时尚很有型,喜欢就试试(清爽时尚很有型)
热门推荐
- springboot vue 异地登录(vue+springboot实现登录验证码)
- 在linux系统中切换成其他用户(如何在Linux命令行与其他用户通信)
- iframe标签教程(关于解决iframe标签嵌套问题的解决方法)
- sass定时任务(sass简介_动力节点Java学院整理)
- canvas绘图问题(记一次高分屏下canvas模糊问题)
- vue实现双向绑定原理(vue实现双向数据绑定)
- 云ecs服务器怎么释放(如何解决阿里云ECS Windows服务器C盘权限被删除导致无法访问)
- 颜色识别模块抓取物体(Referer原理与图片防盗链实现方法详解)
- laravel使用教程(基于Laravel5.4版本的基本增删改查操作方法)
- amaze软件(amazeui时间组件的实现示例)