Java中的WebSocket服务器(hybi 10)发送和接收

时间:2011-10-26 19:10:16

标签: java websocket

我正在为草案的最后一个版本制作Java服务器。我设法建立连接,这很有效。

问题是我不明白数据是如何编码的,我一直试图找到一些如何完成它的例子,但我找不到任何东西。所以我试图自己做,但需要一些帮助。

Here是画面的图像。

但我不明白有效载荷的起点。是什么:

  

扩展的有效负载长度(16/63)(如果有效负载len == 126/127)

那是我的有效载荷所在的地方?

有人可以提供一些帮助,因为你可能会看到,我完全迷失了......

1 个答案:

答案 0 :(得分:2)

问题是长度并不总是适合7位(您只能用7位表示0到127的数字),在这种情况下,将使用以下2或8个字节来使长度适合:

  • 126表示以下2个字节用于长度
  • 127表示以下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)

因此,如果您有字节105165,那么它们的长度为27045