中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-10-20 08:17:43 來源:腳本之家 閱讀:207 作者:雨聲不在 欄目:開發技術

前面說到最近在寫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 自定義協議的方法詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

沾化县| 仲巴县| 东光县| 化州市| 博湖县| 蕉岭县| 南康市| 兴业县| 天峨县| 赤峰市| 南岸区| 锡林浩特市| 陕西省| 益阳市| 张家口市| 渝北区| 屯门区| 锡林浩特市| 鄂托克旗| 登封市| 新田县| 页游| 彰武县| 汾西县| 金湖县| 大田县| 武平县| 界首市| 石家庄市| 延寿县| 蒲城县| 保山市| 嘉祥县| 穆棱市| 马龙县| 万载县| 富宁县| 青浦区| 阆中市| 司法| 武平县|