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

Java中的WebSocket服务器(hybi 10)发送和接收,java,websocket,Java,Websocket,我正在为草案的最后一个版本制作Java服务器。我设法建立了联系,这很有效 问题是,我不明白数据是如何编码的,我一直在试图找到一些必须如何进行编码的示例,但我什么也找不到。所以我试着自己做,但需要一些帮助 是框架的图像 但我不明白有效载荷从哪里开始。什么是: 扩展有效负载长度(16/63)(如果有效负载长度=126/127) 那就是我的有效载荷应该在的地方 有人能提供一些帮助吗,因为正如您所看到的,我完全迷路了…问题是长度并不总是适合7位(您只能用7位表示数字0到127),在这种情况下,将使用以下

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

问题是,我不明白数据是如何编码的,我一直在试图找到一些必须如何进行编码的示例,但我什么也找不到。所以我试着自己做,但需要一些帮助

是框架的图像

但我不明白有效载荷从哪里开始。什么是:

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

那就是我的有效载荷应该在的地方


有人能提供一些帮助吗,因为正如您所看到的,我完全迷路了…

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

  • 126表示以下2个字节用于长度
  • 127表示以下8个字节用于长度
因此,如果没有编码,有效载荷从索引2、4或10开始。编码时,它从6、8或14开始(因为有4个掩码字节)

我之前发布了关于有效载荷数据解码的文章


要以“实数”(而不是单独的字节)形式实际获取长度,可以按如下方式使用按位移位运算符(如果长度有两个字节):

|
基本上是在添加它们:

01101001 00000000
         10100101
-----------------  |
01101001 10100101      (in base 10 that's 27045)

因此,如果您有字节
105
165
,那么它们表示长度为
27045

伟大的链接,另一个问题是,我如何知道要读取多少字节??因为我不知道websocket的“框架”的大小,而在java中,我使用“dataInputStream.read(bytes,totalToRead,leftToRead)…有什么想法吗???完全失去了…谢谢你的收获!@Andres:我不知道java,但正如我所说的,框架包括长度。在我发布的三种情况下,你可以通过第二个字节获得长度(最后7位),第三和第四个字节或第三到第十个字节。@Andres:如果您不知道如何解释字节并将其转换为长度,请查看我的编辑。@Andres:不,我自己不这么做。但这并不意味着这是禁止的。但是如果您发送标题数据和附加数据的长度,它应该可以正常工作。@Andres:我t取决于;hybi草稿同时支持UTF-8数据和二进制数据。使用什么数据取决于操作码(第一个字节的最后4位)。如果您像
ws.send(string)
那样发送JavaScript,您将获得一个文本框(UTF-8),操作码为1。如果您像
ws.send(arraybuffer)那样发送它
,您将获得原始二进制数据,操作码为2。
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)