首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

协议封装

2013-08-24 
协议打包# -*- coding:utf-8 -*-import structdef pack(command_id, sequence, session_id, body):网络

协议打包

# -*- coding:utf-8 -*-import structdef pack(command_id, sequence, session_id, body):    """    网络传输    @param command_id: 协议编号    @param sequence: 序列号    @param session_id:     @param body: 包体,str类型        @return: 二进制串    """        header_size, header_data = pack_header(command_id, sequence, session_id)    body_size, body_data = pack_body(body)    size = header_size + body_size    data = struct.pack('!I', size) + header_data + body_data    return datadef pack_header(command_id, sequence, session_id):    """    包头    """    if isinstance(session_id, unicode):        session_id.encode('utf-8')    fmt = '!IIB%ds' % len(session_id)    header_size = struct.calcsize(fmt)    data = struct.pack(fmt, command_id, sequence, len(session_id), session_id)    return header_size, datadef pack_body(body):    """    包体    """    fmt = '!H%ds' % len(body)    body_size = struct.calcsize(fmt)    data = struct.pack(fmt, len(body), body)    return body_size, data    def unpack(data):     """    解包    """    command_id, sequence, session_id, data = unpack_header(data)    body = unpack_body(data)    return command_id, sequence, session_id, bodydef unpack_size(data):    """    总长度    """    (size,) = struct.unpack('!i', data)    return sizedef unpack_header(data):    """    包头    """    (command_id,), data = struct.unpack('!I', data[:4]), data[4:]    (sequence,), data = struct.unpack('!I', data[:4]), data[4:]    (session_size,), data = struct.unpack('!B', data[:1]), data[1:]    (session_id,), data = struct.unpack('!%ds' % (session_size), data[:session_size]), data[session_size:]    return command_id, sequence, session_id, datadef unpack_body(data):    """    包体    """    (body_size,), data = struct.unpack('!H', data[:2]), data[2:]    (body,) = struct.unpack('!%ds' % (body_size,), data)    if isinstance(body, unicode):        body.encode('utf-8')    return body

?

热点排行