python 自定義協議

2021-08-06 07:04:37 字數 2233 閱讀 9839

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

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

簡單放一下他的實現:

import struct

import ctypes

class

e(exception):

def__init__

(self, what):

self.what = what

def__str__

(self):

return self.what

defunmarshall_packet

(pk):

if len(pk) < 12:

raise e("invalid pk header")

size, uri, prop_count = struct.unpack(", 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(", 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(", 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(", ss, 0, 8 + 4 + len(key1) + len(val1) + len(key2) + len(val2) + 16, 2, 2)

offset += 12

struct.pack_into("% (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 的structbytearray的操作真是舒服,直接放進去就可以了(之前我有不少東西都是徒手解的,回頭再用這個優化下自己的**吧。)

另外乙個是vi寫**真是直接方便

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

自定義 如何自定義協議

何為自定義協議,其實是相對標準協議來說的,這裡主要針對的是應用層協議 常見的標準的應用層協議如http ftp smtp等,如果我們在網路通訊的過程中不去使用這些標準協議,那就需要自定義協議,比如我們常用的rpc框架 dubbo,thrift 分布式快取 redis,memcached 等都是自定義...

自定義協議 你也可以自定義報頭協議

在學習過計算機網路的課程,我們知道剛開始計算機都是單獨離線工作的,沒有聯網的情況下計算機的資訊共享能力 運算能力都非常有限,後來誕生了計算機網路.有了就是那幾網路,計算機 a 的資訊和資料可以通過網路傳遞到計算機 b,同樣計算機 a 可以獲取到來自計算機 b 的資料.但是不同計算機之間交換資料的時候...

自定義協議族

include include include include define pf myfamily 28 static void stream csk destroy sock struct sock sk static void my proto close struct sock sk,lon...