我正在为最后一个版本的草案制作一个Java服务器。我成功地建立了联系,效果很好。
问题是我不明白数据是如何编码的,我一直在试图找到一些例子,但我找不到任何东西。所以我想自己做这件事,但需要一些帮助。
这是一个框架的图像。
但是我不明白载荷从哪里开始。什么是:
扩展有效载荷长度(16/63)(如果有效载荷len==126/127)
那是我的有效载荷应该在哪里?
谁能给点帮助,因为你可能看到,我完全迷路了…
问题是长度并不总是适合7位(你只能用7位表示数字0到127),在这种情况下,下面的2或8个字节将用于使长度适合:
- 126表示以下2个字节用于长度
- 127表示以下8个字节用于长度
如果未编码,则负载从索引2、4或10开始。当编码时,它从6,8或14开始(因为有4个掩码字节)。
我之前发布了一些关于解码有效载荷数据的伪代码。
要实际获得"实数"长度(而不是单独的字节),您可以使用按位移位操作符如下(如果长度有两个字节):
var length = (bytes[2] << 8) | (bytes[3] << 0);
这将像这样计算:
假设:
-
bytes[2]
为01101001
(105
为10进制) -
bytes[3]
=10100101
(165
进制为10)
那么<<
将会做:
01101001 00000000 // moved 8 places to the left, filled with zeroes
10100101 // moved 0 places (nothing really happening, you can eliminate '<< 0')
|
基本上是添加它们:
01101001 00000000
10100101
----------------- |
01101001 10100101 (in base 10 that's 27045)
如果你有字节105
和165
,那么它们代表27045
的长度