前面说到最近在写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 &#61; struct.unpack("
print "size:%d uri:%d prop_count:%d" % (size, uri, prop_count)
if len(pk) - 12 !&#61; size - 8:
raise E("Invalid pk length")
ss &#61; pk[12:]
offset &#61; 0
for x in range(0, prop_count):
# Pop key
key_size, &#61; struct.unpack_from("
print "key_size:%d" % (key_size,)
offset &#43;&#61; 4
key, &#61; struct.unpack_from("
offset &#43;&#61; key_size
# Pop value
val_size, &#61; struct.unpack_from("
offset &#43;&#61; 4
print "val_size:%d" % (val_size,)
val, &#61; struct.unpack_from("
offset &#43;&#61; val_size
print "key:%s val:%s" % (key, val)
key1 &#61; "key1"
val1 &#61; "val1"
key2 &#61; "key2"
val2 &#61; "val2"
offset &#61; 0
ss &#61; ctypes.create_string_buffer(9085)
struct.pack_into("
offset &#43;&#61; 12
struct.pack_into("
len(val1) &#43; 1, val1, &#39;\0&#39;,
len(key2) &#43; 1, key2, &#39;\0&#39;,
len(val2) &#43; 1, val2, &#39;\0&#39;)
offset &#43;&#61; len(key1) &#43; len(val1) &#43; len(key2) &#43; len(val2) &#43; 4 &#43; 16
unmarshall_packet(ss[:offset])
"""
hex&#61;""
ss &#61; bytearray.fromhex(hex)
unmarshall_packet(ss)
有很多可以学习的地方
一个是python 的 struct 对 bytearray 的操作真是舒服&#xff0c;直接放进去就可以了(之前我有不少东西都是徒手解的&#xff0c;回头再用这个优化下自己的代码吧。)
另外一个是vi写代码真是直接方便
要说缺点的话&#xff0c;应该是用私有协议&#xff0c;没有第三方工具可以作为公证&#xff0c;例如postman之类的。
以上这篇对python 自定义协议的方法详解就是小编分享给大家的全部内容了&#xff0c;希望能给大家一个参考&#xff0c;也希望大家多多支持我们。
本文标题: 对python 自定义协议的方法详解
本文地址: http://www.cppcns.com/jiaoben/python/251982.html