我正在为草案的最后一个版本制作Java服务器。我设法建立连接,这很有效。
问题是我不明白数据是如何编码的,我一直试图找到一些如何完成它的例子,但我找不到任何东西。所以我试图自己做,但需要一些帮助。
Here是画面的图像。
但我不明白有效载荷的起点。是什么:
扩展的有效负载长度(16/63)(如果有效负载len == 126/127)
那是我的有效载荷所在的地方?
有人可以提供一些帮助,因为你可能会看到,我完全迷失了......
答案 0 :(得分:2)
问题是长度并不总是适合7位(您只能用7位表示0到127的数字),在这种情况下,将使用以下2或8个字节来使长度适合:
因此,如果没有编码,有效载荷将从索引2,4或10开始。编码时,它从6,8或14开始(因为有4个掩码字节)。
我之前发布了关于解码有效载荷数据的some pseudocode。
要实际将长度作为“实数”(而不是单独的字节),您可以使用按位移位运算符,如下所示(如果长度有两个字节):
var length = (bytes[2] << 8) | (bytes[3] << 0);
这将按如下方式计算:
假设:
bytes[2]
为01101001
(基数为10 105
)bytes[3]
为10100101
(基数为10 165
)然后<<
将会这样做:
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
。