国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

對python 自定義協議的方法詳解

2020-02-16 01:07:59
字體:
來源:轉載
供稿:網友

前面說到最近在寫python的一些東西,然后和另外一位小伙伴定義了協議,然后昨天我有一部分東西沒理解對,昨天上午我自己重寫了一遍接收和發送的全部邏輯,昨天下午補了壓力測試的腳本,自測沒問題之后告知聯調的小伙伴。

結果上午還是出了一點問題,然后我們兩對代碼,他寫了一個python的實現。還好最后我這邊沒問題。(我也害怕是我這邊出問題啊,所以我自己的代碼都自己檢查了好幾遍)

簡單放一下他的實現:

import structimport ctypesclass E(Exception): def __init__(self, what):  self.what = what def __str__(self):  return self.whatdef 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 = 0ss = 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 += 12struct.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 + 16unmarshall_packet(ss[:offset])"""hex=""ss = bytearray.fromhex(hex)unmarshall_packet(ss)

有很多可以學習的地方

一個是python 的 struct 對 bytearray 的操作真是舒服,直接放進去就可以了(之前我有不少東西都是徒手解的,回頭再用這個優化下自己的代碼吧。)

另外一個是vi寫代碼真是直接方便

要說缺點的話,應該是用私有協議,沒有第三方工具可以作為公證,例如postman之類的。

以上這篇對python 自定義協議的方法詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林站長站。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 佳木斯市| 万年县| 瓮安县| 资中县| 金门县| 交城县| 电白县| 邵武市| 土默特右旗| 盐津县| 荥阳市| 沙田区| 福清市| 雅安市| 海原县| 宁夏| 洛浦县| 孝义市| 临夏县| 白朗县| 比如县| 马关县| 大庆市| 鹰潭市| 五大连池市| 卓尼县| 延吉市| 玉门市| 石狮市| 温州市| 贞丰县| 丰台区| 临清市| 渝中区| 彭山县| 拉萨市| 涟源市| 广灵县| 连城县| 宁强县| 屯留县|