对python 自定义协议的方法详解


Posted in Python onFebruary 13, 2019

前面说到最近在写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 自定义协议的方法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python过滤函数filter()使用自定义函数过滤序列实例
Aug 26 Python
Python制作Windows系统服务
Mar 25 Python
Python实现PS滤镜Fish lens图像扭曲效果示例
Jan 29 Python
python list转矩阵的实例讲解
Aug 04 Python
Python assert关键字原理及实例解析
Dec 13 Python
详解python内置常用高阶函数(列出了5个常用的)
Feb 21 Python
pymysql之cur.fetchall() 和cur.fetchone()用法详解
May 15 Python
基于Python实现简单学生管理系统
Jul 24 Python
Python实现Canny及Hough算法代码实例解析
Aug 06 Python
python 6种方法实现单例模式
Dec 15 Python
Python3.10的一些新特性原理分析
Sep 15 Python
Python 实现两个服务器之间文件的上传方法
Feb 13 #Python
Python魔法方法详解
Feb 13 #Python
Python函数中不定长参数的写法
Feb 13 #Python
python调用c++ ctype list传数组或者返回数组的方法
Feb 13 #Python
python调用c++传递数组的实例
Feb 13 #Python
利用ctypes获取numpy数组的指针方法
Feb 12 #Python
python3利用ctypes传入一个字符串类型的列表方法
Feb 12 #Python
You might like
PHP 递归效率分析
2009/11/24 PHP
php异步多线程swoole用法实例
2014/11/14 PHP
php常用表单验证类用法实例
2015/06/18 PHP
解决PHP使用CURL发送GET请求时传递参数的问题
2019/10/11 PHP
jquery实现简单的拖拽效果实例兼容所有主流浏览器(优化篇)
2013/06/28 Javascript
js获取input标签的输入值实现代码
2013/08/05 Javascript
JS对象转换为Jquery对象实现代码
2013/12/29 Javascript
js关于精确计算和数值格式化以及直接引js文件
2014/01/28 Javascript
javascript实现点击商品列表checkbox实时统计金额的方法
2015/05/15 Javascript
jQuery EasyUI Pagination实现分页的常用方法
2016/05/21 Javascript
浅谈jquery.form.js的ajaxSubmit和ajaxForm的使用
2016/09/09 Javascript
JavaScript获取服务器时间的方法详解
2016/12/11 Javascript
BootStrop前端框架入门教程详解
2016/12/25 Javascript
Node.js复制文件的方法示例
2016/12/29 Javascript
JavaScript数据结构学习之数组、栈与队列
2017/05/02 Javascript
基于iScroll实现内容滚动效果
2018/03/21 Javascript
vue-cli2.x项目优化之引入本地静态库文件的方法
2018/06/19 Javascript
Vue列表渲染的示例代码
2018/11/01 Javascript
javascript数组的定义及操作实例
2019/11/10 Javascript
React+EggJs实现断点续传的示例代码
2020/07/07 Javascript
微信小程序实现倒计时功能
2020/11/19 Javascript
ES6中的类(Class)示例详解
2020/12/09 Javascript
python 3.7.0 安装配置方法图文教程
2018/08/27 Python
100行Python代码实现每天不同时间段定时给女友发消息
2019/09/27 Python
python matplotlib工具栏源码探析三之添加、删除自定义工具项的案例详解
2021/02/25 Python
BCBG官网:BCBGMAXAZRIA
2017/12/29 全球购物
自我推荐书
2013/12/04 职场文书
运动会表扬稿大全
2014/01/16 职场文书
网上商城创业计划书范文
2014/01/31 职场文书
大一新生学期自我评价
2014/04/09 职场文书
军训口号
2014/06/13 职场文书
2014乡镇党政班子四风问题思想汇报
2014/09/14 职场文书
夫妻分居协议书范本
2014/11/28 职场文书
2014年前台接待工作总结
2014/12/05 职场文书
大学宣传委员竞选稿
2015/11/19 职场文书
李清照的诗词赏析(20首)
2019/08/22 职场文书