最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

對(duì)python 自定義協(xié)議的方法詳解

 更新時(shí)間:2019年02月13日 09:40:47   作者:雨聲不在  
今天小編就為大家分享一篇對(duì)python 自定義協(xié)議的方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

前面說(shuō)到最近在寫(xiě)python的一些東西,然后和另外一位小伙伴定義了協(xié)議,然后昨天我有一部分東西沒(méi)理解對(duì),昨天上午我自己重寫(xiě)了一遍接收和發(fā)送的全部邏輯,昨天下午補(bǔ)了壓力測(cè)試的腳本,自測(cè)沒(méi)問(wèn)題之后告知聯(lián)調(diào)的小伙伴。

結(jié)果上午還是出了一點(diǎn)問(wèn)題,然后我們兩對(duì)代碼,他寫(xiě)了一個(gè)python的實(shí)現(xiàn)。還好最后我這邊沒(méi)問(wèn)題。(我也害怕是我這邊出問(wèn)題啊,所以我自己的代碼都自己檢查了好幾遍)

簡(jiǎ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í)的地方

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

另外一個(gè)是vi寫(xiě)代碼真是直接方便

要說(shuō)缺點(diǎn)的話,應(yīng)該是用私有協(xié)議,沒(méi)有第三方工具可以作為公證,例如postman之類的。

以上這篇對(duì)python 自定義協(xié)議的方法詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python中的字符串操作和編碼Unicode詳解

    Python中的字符串操作和編碼Unicode詳解

    其實(shí)字符串也是一種數(shù)據(jù)類型,但是,字符串比較特殊的是還有一個(gè)編碼問(wèn)題。下面這篇文章主要給大家介紹了Python中的字符串操作和編碼Unicode詳解的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-01-01
  • Python中的__init__作用是什么

    Python中的__init__作用是什么

    在本篇文章里小編給大家分享的是關(guān)于Python中的__init__作用以及相關(guān)用法內(nèi)容,需要的朋友們可以學(xué)習(xí)下。
    2020-06-06
  • Python正則表達(dá)式re.search()用法詳解

    Python正則表達(dá)式re.search()用法詳解

    re是Python中最常見(jiàn)的正則表達(dá)式模塊,常用方法包括compile,match,findall,finditer,search,split,sub等,下面這篇文章主要給大家介紹了關(guān)于Python正則表達(dá)式re.search()用法詳解的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • python基礎(chǔ)之變量與內(nèi)存管理方式

    python基礎(chǔ)之變量與內(nèi)存管理方式

    本文介紹了變量的定義、賦值、使用原則、命名規(guī)范、內(nèi)存管理以及變量的特征,變量是程序中可變化的量,需要先定義后使用,可多次更改值,Python作為弱類型語(yǔ)言,變量無(wú)需聲明類型即可賦值
    2024-09-09
  • 淺述python中argsort()函數(shù)的實(shí)例用法

    淺述python中argsort()函數(shù)的實(shí)例用法

    本篇文章主要介紹了淺述python中argsort()函數(shù)的實(shí)例用法,詳細(xì)的介紹了argsort()函數(shù)的用法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • python httpx的具體使用

    python httpx的具體使用

    本文主要介紹了python httpx的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Python 通過(guò)監(jiān)聽(tīng)端口實(shí)現(xiàn)唯一腳本運(yùn)行方式

    Python 通過(guò)監(jiān)聽(tīng)端口實(shí)現(xiàn)唯一腳本運(yùn)行方式

    這篇文章主要介紹了Python 通過(guò)監(jiān)聽(tīng)端口實(shí)現(xiàn)唯一腳本運(yùn)行方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • python百行代碼自制電腦端網(wǎng)速懸浮窗的實(shí)現(xiàn)

    python百行代碼自制電腦端網(wǎng)速懸浮窗的實(shí)現(xiàn)

    這篇文章主要介紹了python百行代碼自制電腦端網(wǎng)速懸浮窗的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • flask框架自定義過(guò)濾器示例【markdown文件讀取和展示功能】

    flask框架自定義過(guò)濾器示例【markdown文件讀取和展示功能】

    這篇文章主要介紹了flask框架自定義過(guò)濾器,結(jié)合實(shí)例形式分析了flask基于自定義過(guò)濾器實(shí)現(xiàn)markdown文件讀取和展示功能相關(guān)操作技巧,需要的朋友可以參考下
    2019-11-11
  • Django用戶認(rèn)證系統(tǒng) Web請(qǐng)求中的認(rèn)證解析

    Django用戶認(rèn)證系統(tǒng) Web請(qǐng)求中的認(rèn)證解析

    這篇文章主要介紹了Django用戶認(rèn)證系統(tǒng) Web請(qǐng)求中的認(rèn)證解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08

最新評(píng)論

福鼎市| 香港| 驻马店市| 澎湖县| 昌乐县| 衡南县| 班玛县| 中牟县| 沁阳市| 泽普县| 尚志市| 南投市| 遂昌县| 龙江县| 乡宁县| 高台县| 广饶县| 古交市| 揭西县| 哈尔滨市| 和龙市| 温宿县| 天台县| 海晏县| 朔州市| 南华县| 如皋市| 平远县| 阿拉尔市| 枝江市| 康乐县| 平舆县| 元江| 绍兴县| 沁阳市| 玛曲县| 翼城县| 卓资县| 连江县| 连云港市| 阿坝县|