• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            socketref,再見!高德

            https://github.com/adoggie

              C++博客 :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
              246 Posts :: 4 Stories :: 312 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(54)

            我參與的團(tuán)隊(duì)

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜



              1 # -- coding:utf-8 --
              2 
              3 import socket,traceback,os,os.path,sys,time,struct,base64,gzip,array,json,zlib
              4 
              5 '''
              6 ------------------
              7 msghdr
              8 cmdtxt
              9 \0\0
             10 二進(jìn)制流
             11 -----------------
             12 視頻包由三部分構(gòu)成: MetaMessage數(shù)據(jù)元封套,控制命令文本(json格式),二進(jìn)制數(shù)據(jù),后兩者之間采用連續(xù)兩個(gè)\0區(qū)分,表示開始二進(jìn)制流數(shù)據(jù)
             13 [metamsg,cmdtxt,bindata]
             14 bindata部分格式、編碼由cmdtxt控制
             15 
             16 # [magic,size,compress,encrypt,version],[command text(json)],[\0\0],[binary data..]
             17 '''
             18 
             19 COMPRESS_NONE = 0
             20 COMPRESS_ZLIB = 1
             21 COMPRESS_BZIP2 = 2
             22 
             23 ENCRYPT_NONE = 0
             24 ENCRYPT_MD5  = 1
             25 ENCRYPT_DES  = 2
             26 
             27 
             28 class MessageBase:
             29     def __init__(self,type='',bin=None):
             30         #self.type = type
             31         self.attrs={'msg':type}
             32         self.bin = bin
             33     
             34     def getMsg(self):
             35         return self.getValue('msg')
             36         
             37     def getValue(self,key):
             38         if self.attrs.has_key(key):
             39             return self.attrs[key]
             40         return None
             41     
             42     def getBinary(self):
             43         return self.bin
             44         
             45     def marshall(self):
             46         d = json.dumps(self.attrs)
             47         if self.bin:
             48             d+='\0\0'+ self.bin
             49         return d
             50     
             51     @classmethod
             52     def unmarshall(cls,d):
             53         m = None        
             54         sep = d.find('\0\0')
             55         txt = None
             56         bin = None
             57         if sep == -1:
             58             txt = d
             59         else:
             60             txt = d[:sep]
             61             bin = d[sep+2:]        
             62         m = MessageBase()
             63         try:
             64             m.attrs = json.loads(txt)
             65             if type(m.attrs) != type({}):
             66                 return None            
             67             m.bin = bin
             68         except:
             69             m = None
             70         return m
             71         
             72 class MsgCallReturn(MessageBase):
             73     def __init__(self,succ=True,errno=0 ,errmsg='',value=None,bin=None):
             74         MessageBase.__init__(self,'callret',bin)
             75         self.attrs['succ']=succ
             76         self.attrs['errno']=errno
             77         self.attrs['errmsg']=errmsg
             78         self.attrs['value']=value
             79         
             80 class NetMetaPacket:
             81     # [magic,size,compress,encrypt,version],[command text(json)],[\0\0],[binary data..]
             82     def __init__(self,msg=None,compress=COMPRESS_NONE,encrypt = ENCRYPT_NONE ):
             83         self.msg = msg
             84         self.size4 = 0
             85         self.compress1 = compress
             86         self.encrypt1 = encrypt
             87         self.ver4 = 0x01000000 # means 1.0.0.0
             88     magic4=0xEFD2BB99
             89     
             90     @classmethod
             91     def minSize(cls):
             92         return 14
             93         
             94     def marshall(self):
             95         d = self.msg.marshall()
             96         if self.compress1 == COMPRESS_ZLIB:
             97             d = zlib.compress(d)
             98         else:
             99             self.compress1 = COMPRESS_NONE
            100         self.encrypt1 = ENCRYPT_NONE 
            101         # [magic,size,compress,encrypt,version],[command text(json)],[\0\0],[binary data..]
            102         r = struct.pack('!BBI',self.compress1,self.encrypt1,self.ver4)
            103         r+= d
            104         self.size4 = len(r)+4
            105         r = struct.pack('!II', self.magic4,self.size4) + r
            106         # size =包含自身變量的整個(gè)包大小
            107         return r
            108 
            109         
            110         
            111 if __name__=='__main__':
            112     
            113     print NetMetaPacket(msg=MsgCallReturn(value=range(10),bin='abc' ),compress=COMPRESS_NONE).marshall()
            114     print NetMetaPacket.minSize()
            115    
            posted on 2012-03-08 23:14 放屁阿狗 閱讀(477) 評(píng)論(0)  編輯 收藏 引用

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            国产综合免费精品久久久| 色播久久人人爽人人爽人人片aV | 色综合久久久久| 久久99国产乱子伦精品免费| 狠狠色丁香久久婷婷综合| 久久综合视频网| 久久久国产视频| 蜜臀av性久久久久蜜臀aⅴ麻豆 | 久久99九九国产免费看小说| 精品久久久久久无码人妻蜜桃| 7国产欧美日韩综合天堂中文久久久久| 久久国产色AV免费看| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 久久综合狠狠色综合伊人| 久久青青草原精品国产不卡| 国产99久久九九精品无码| 精品久久久久久| 久久精品成人免费国产片小草| 国产精品免费久久| 一本大道久久东京热无码AV| 伊人久久无码精品中文字幕| 亚洲综合日韩久久成人AV| 久久久久亚洲AV成人片| 日韩欧美亚洲综合久久影院d3| 久久久精品国产亚洲成人满18免费网站| 久久精品国产一区二区三区日韩| 亚洲va久久久噜噜噜久久狠狠| 久久综合给合久久狠狠狠97色| 久久免费高清视频| 久久午夜无码鲁丝片午夜精品| 久久久久久久久波多野高潮| 麻豆亚洲AV永久无码精品久久| 97久久超碰国产精品旧版| 国内精品久久久久久久coent| 国产精品久久久久久五月尺| 狠狠狠色丁香婷婷综合久久五月| 久久久人妻精品无码一区| 久久天天躁狠狠躁夜夜躁2O2O| 久久精品成人免费观看97| 久久99精品久久只有精品| 欧美国产成人久久精品|