负载大小大于 125 字节

Posted

技术标签:

【中文标题】负载大小大于 125 字节【英文标题】:Payload size larger than 125 bytes 【发布时间】:2014-03-20 19:43:08 【问题描述】:

我正在使用这个函数来解码通过 html5 websockets 发送的包 但是当有效载荷超过 125 字节时,它就会崩溃。 能不能变大点?


def decode_data(data):
  databyte = bytearray(data)
  datalen = (0x7F & databyte[1])
  str_data = ''
  if(datalen > 0):
    mask_key = databyte[2:6]
    masked_data = databyte[6:(6+datalen)]
    unmasked_data = [masked_data[i] ^ mask_key[i%4] for i in range(len(masked_data))]
    str_data = str(bytearray(unmasked_data))
  return str_data

【问题讨论】:

对于任何正在查看的人:def decode_data(data): if not len(data): return False length = ord(data[1]) & 127 if length == 126: mask = data[4 :8] raw = data[8:] elif length == 127: mask = data[10:14] raw = data[14:] else: mask = data[2:6] raw = data[6:] ret = '' for cnt, d in enumerate(raw): ret += chr(ord(d) ^ ord(mask[cnt%4])) return ret 【参考方案1】:

这不是延长它的问题。根据RFC 6455:

如果长度为 0-125,则为有效载荷长度。 如果为 126,则解释为 16 位无符号整数的以下 2 个字节是有效负载长度。 如果为 127,则解释为 64 位无符号整数(最高有效位必须为 0)的以下 8 个字节是有效负载长度。

长度必须被分割成单独的字节,这意味着您需要向右移位(八位),然后通过执行和1111 1111(这是255)。

This answer 详细介绍了这个主体。

【讨论】:

以上是关于负载大小大于 125 字节的主要内容,如果未能解决你的问题,请参考以下文章

WebSocketClient 无法接收大小大于约 16k 字节的消息。抛出 ConnectionLostException

丢弃大于 1500 字节的 UDP 数据包

您的免安装应用 APK 包含的 APK 大于 4364793 字节的最大大小

TCP协议基础知识及wireshark抓包分析实战

服务总线通知中心:推送通知的有效负载大小限制是多少?

UDP数据包字节读取粒度?