我正在编写嵌入式WebSocket服务器,并直接从相关的RFC工作。
我的服务器正确响应了来自浏览器的升级请求,并且浏览器以其示例javascript继续通过新建立的套接字发送短消息。所以一切正常。
该消息很短(完整的帧只有21个字节),并且包含我的服务器愉快地解码的所有相关字段。
树桩器位于第9至15位,应该包含有效载荷的长度。
这是WireShark上捕获的消息的十六进制转储:
81 8f 11 ab d5 0b 5c ce a6 78 70 cc b0 2b 65 c4 f5 78 74 c5 b1
因此您可以看到,第一个字节包含FIN(1位),RSVD1(1位),RSVD2(1位),RSVD3(1位)和操作码的4位。到目前为止一切都很好。
8f是树桩机:包含MASK位和有效载荷长度,MASK位设置为1可以,但是当整个帧只有21个字节长并且其余7位时,其余7位的值为71(0x47)。有效载荷只有15个字节长。
那我在做什么错了?
我可以通过对有效负载应用XOR掩码来解码消息,但是长度是问题所在,因为它控制着解码循环并进行71次迭代,而不是应进行的15次迭代。
我很感谢有任何关于做错事情的线索
谢谢
答案 0 :(得分:0)
问题是我的结构没有考虑到AMD 64处理器的耐久性!!!有时候答案就在那里;-)