對python 自定義協(xié)議的方法詳解
前面說到最近在寫python的一些東西,然后和另外一位小伙伴定義了協(xié)議,然后昨天我有一部分東西沒理解對,昨天上午我自己重寫了一遍接收和發(fā)送的全部邏輯,昨天下午補(bǔ)了壓力測試的腳本,自測沒問題之后告知聯(lián)調(diào)的小伙伴。
結(jié)果上午還是出了一點(diǎn)問題,然后我們兩對代碼,他寫了一個python的實(shí)現(xiàn)。還好最后我這邊沒問題。(我也害怕是我這邊出問題啊,所以我自己的代碼都自己檢查了好幾遍)
簡單放一下他的實(shí)現(xiàn):
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)
有很多可以學(xué)習(xí)的地方
一個是python 的 struct 對 bytearray 的操作真是舒服,直接放進(jìn)去就可以了(之前我有不少東西都是徒手解的,回頭再用這個優(yōu)化下自己的代碼吧。)
另外一個是vi寫代碼真是直接方便
要說缺點(diǎn)的話,應(yīng)該是用私有協(xié)議,沒有第三方工具可以作為公證,例如postman之類的。
以上這篇對python 自定義協(xié)議的方法詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于Python實(shí)現(xiàn)將列表數(shù)據(jù)生成折線圖
這篇文章主要介紹了如何利用Python中的pandas庫和matplotlib庫,實(shí)現(xiàn)將列表數(shù)據(jù)生成折線圖,文中的示例代碼簡潔易懂,需要的可以參考一下2022-03-03Python采集貓眼兩萬條數(shù)據(jù) 對《無名之輩》影評進(jìn)行分析
這篇文章主要給大家介紹了關(guān)于利用Python榮國采集兩萬條貓眼數(shù)據(jù),對《無名之輩》影評進(jìn)行分析的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12對pycharm代碼整體左移和右移縮進(jìn)快捷鍵的介紹
今天小編就為大家分享一篇對pycharm代碼整體左移和右移縮進(jìn)快捷鍵的介紹,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07Android模擬器無法啟動,報(bào)錯:Cannot set up guest memory ‘a(chǎn)ndroid_arm’ I
這篇文章主要介紹了Android模擬器無法啟動,報(bào)錯:Cannot set up guest memory ‘a(chǎn)ndroid_arm’ Invalid argument的解決方法,通過模擬器ram設(shè)置的調(diào)整予以解決,需要的朋友可以參考下2016-07-07