位解包运算

# info=conn.recv(8096)
# payload_len=info[1]  &127
##拿到这payload的值
# if payload_len==126:
#     extend_payload_len==info[2:4]
#这个是头部信息,这个会往后面多占16位,就是前面的2个字节加上后面加上的4个字节,头部信息就是4个字节
#     mask=info[4:8]
#     decodeed=info[8:]
#     ###########这个decoded是数据信息
# elif  payload_len ==127:
#     ##########注明一下,这个投币想你想,之前是固占2个字节的,如果是127的话,那么这个就往后面占10个字节(这个是头部信息),mask_key这个是占4个字节
#     extend_payload_len==info[2:10]
#     mask=info[10:14]
#     decodeed=info[14:]
#     # 这个就是数据了
#
# else:
#     extend_payload_len=None
#     mask=info[2:6]
#     decodeed=info[6:]
#
#     bytes_list=bytearray()
#
#     for i in range(len(decodeed)):
#         chunk=decodeed[i]  ^ mask[i%4]
#         ##这个amsk是进行解密的,mask_key对数据发送过来的,后面的数据是加密的, 而amsk_key是进行解密的,解密过程是往这个数据一个一个号字节的
#         ##拿,而这个解密是一个个的解密
#         bytes_list.append(chunk)
#
#     body=str(bytes_list,encoding='utf-8')
#
#     print(body)
#
#
#



#注明一下,OX这个是16进制的

#加一个消息头,就可以判断这个消息什么时候结束了
def send_msg(conn,msg_bytes):
    import  struct
    token=b'81'
    length=len(msg_bytes)
    if length<126:
#3注明一下 ,如果你发的数据小于126的话,就以下面的B这种方式打包,下面的代表了规则
        token+=struct.pack('B',length)
    elif  length<=0XFFFF:
        token+=struct.pack('!BH',126,length)
    else:
        token+=struct.pack('!BQ',127,length)

    msg=token+msg_bytes

    conn.send(msg)

    return  True
原文地址:https://www.cnblogs.com/yunxintryyoubest/p/10016102.html