Java中的WebSocket服务器(hybi 10)发送和接收
我正在为草案的最后一个版本制作Java服务器。我设法建立了联系,这很有效 问题是,我不明白数据是如何编码的,我一直在试图找到一些必须如何进行编码的示例,但我什么也找不到。所以我试着自己做,但需要一些帮助 是框架的图像 但我不明白有效载荷从哪里开始。什么是: 扩展有效负载长度(16/63)(如果有效负载长度=126/127) 那就是我的有效载荷应该在的地方Java中的WebSocket服务器(hybi 10)发送和接收,java,websocket,Java,Websocket,我正在为草案的最后一个版本制作Java服务器。我设法建立了联系,这很有效 问题是,我不明白数据是如何编码的,我一直在试图找到一些必须如何进行编码的示例,但我什么也找不到。所以我试着自己做,但需要一些帮助 是框架的图像 但我不明白有效载荷从哪里开始。什么是: 扩展有效负载长度(16/63)(如果有效负载长度=126/127) 那就是我的有效载荷应该在的地方 有人能提供一些帮助吗,因为正如您所看到的,我完全迷路了…问题是长度并不总是适合7位(您只能用7位表示数字0到127),在这种情况下,将使用以下
有人能提供一些帮助吗,因为正如您所看到的,我完全迷路了…问题是长度并不总是适合7位(您只能用7位表示数字0到127),在这种情况下,将使用以下2或8个字节使长度适合:
- 126表示以下2个字节用于长度
- 127表示以下8个字节用于长度
要以“实数”(而不是单独的字节)形式实际获取长度,可以按如下方式使用按位移位运算符(如果长度有两个字节):
|
基本上是在添加它们:
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)