socket 发送和接受数据都是有一定要求的
socket 的数据其长度信息和真实内容都是需要解析才能得到的
如下解析数据,都有详细注释
def parse_data(self, msg):
if len(msg) == 0:
return ''
# 去除二进制中的第1位
v = ord(msg[1]) & 0x7f
# p 掩码的开始位
# 1位如果是 126 表接下来的两个字节才是长度
# 接下来两个是长度,加上0位和1位,就是 4 位开始掩码
if v == 0x7e:
p = 4
# 1位 127 表接下来的八个字节才是长度
# 接下来 8 个代表长度,加上 0 and 1 则是 10 开始掩码
elif v == 0x7f:
p = 10
# 1 位 1-125 则本身代表长度
# 0 and 1 则 2 开始掩码
else:
p = 2
# mark 掩码为包长之后的 4 个字节
mask = msg[p:p + 4]
data = msg[p + 4:]
#print 'mask num is \n %s' % [ord(v) for v in mask]
#print 'mask little num is \n %s' % [ord(v) & 0x7f for v in mask]
#print 'mask is \n %s' % [chr(ord(v) & 0x7f) for v in mask]
ori = ''.join([chr(ord(v) ^ ord(mask[k % 4])) for k, v in enumerate(data)])
print 'origin data is \n %s' % ori
return ori
网友评论