对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脚本来获取mp3文件tag信息的教程
May 04 Python
Django框架中数据的连锁查询和限制返回数据的方法
Jul 17 Python
完美解决Python2操作中文名文件乱码的问题
Jan 04 Python
python读取二进制mnist实例详解
May 31 Python
Python图像处理之图片文字识别功能(OCR)
Jul 30 Python
Django之模板层的实现代码
Sep 09 Python
Python imageio读取视频并进行编解码详解
Dec 10 Python
python系统指定文件的查找只输出目录下所有文件及文件夹
Jan 19 Python
Python Pandas 对列/行进行选择,增加,删除操作
May 17 Python
Python新手学习函数默认参数设置
Jun 03 Python
解决Keras 自定义层时遇到版本的问题
Jun 16 Python
浅谈matplotlib 绘制梯度下降求解过程
Jul 12 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
第九节--绑定
2006/11/16 PHP
php打印输出棋盘的实现方法
2014/12/23 PHP
JS实现打开本地文件或文件夹
2021/03/09 Javascript
javascript下操作css的float属性的特殊写法
2007/08/22 Javascript
用JavaScript将从数据库中读取出来的日期型格式化为想要的类型。
2009/08/15 Javascript
利用google提供的API(JavaScript接口)获取网站访问者IP地理位置的代码详解
2010/07/24 Javascript
输入密码检测大写是否锁定js实现代码
2012/12/03 Javascript
LABjs、RequireJS、SeaJS的区别
2014/03/04 Javascript
js数组操作常用方法
2014/05/08 Javascript
Javascript中的默认参数详解
2014/10/22 Javascript
详解JavaScript正则表达式之RegExp对象
2015/12/13 Javascript
jQuery is not defined 错误原因与解决方法小结
2017/03/19 Javascript
详解layui中的树形关于取值传值问题
2018/01/16 Javascript
在vue中使用echarts(折线图的demo,markline用法)
2020/07/20 Javascript
vue3.0中setup使用(两种用法)
2020/12/02 Vue.js
python下载文件时显示下载进度的方法
2015/04/02 Python
Python多线程和队列操作实例
2015/06/21 Python
使用Python解析JSON数据的基本方法
2015/10/15 Python
AI人工智能 Python实现人机对话
2017/11/13 Python
python调用摄像头显示图像的实例
2018/08/03 Python
Pytorch卷积层手动初始化权值的实例
2019/08/17 Python
python3.7环境下安装Anaconda的教程图解
2019/09/10 Python
python判断无向图环是否存在的示例
2019/11/22 Python
python时间与Unix时间戳相互转换方法详解
2020/02/13 Python
利用Tensorboard绘制网络识别准确率和loss曲线实例
2020/02/15 Python
python数据爬下来保存的位置
2020/02/17 Python
中软国际Java程序员机试题
2012/08/19 面试题
师范生自荐信
2013/10/27 职场文书
学习全国两会精神心得体会范文
2014/03/17 职场文书
检察机关个人对照检查材料
2014/09/15 职场文书
张家口市高新区党工委群众路线教育实践活动整改方案
2014/10/25 职场文书
教师培训简讯
2015/07/20 职场文书
劳保用品管理制度范本
2015/08/06 职场文书
党员反腐倡廉学习心得体会
2015/08/15 职场文书
学生会2016感恩节活动小结
2016/04/01 职场文书
告诉你创业计划书的8个实用技巧
2019/07/12 职场文书