c++中的WebSocket查找位

wj8zmpe1  于 2023-03-02  发布在  其他
关注(0)|答案(2)|浏览(106)

我最近在使用websockets的fin位和我的c++服务器时遇到了一个小问题。每当我尝试使用FIN = 0时,主机都会无缘无故地断开连接。下面是我计算FIN的部分代码:

string ret
ret += (unsigned char)((fin & 1) << 7) | (opcode & 63);

当我使用FIN = 1时,帧中的第一个字节是129,这是正确的,用户得到了正确的回答。当FIN = 0时,第一个字节是1,这似乎也是正确的,然后在发送连接后断开。尝试发送带有两个标志的相同数据包,只有FIN = 0失败;
为什么我尝试使用FIN = 0?我想做一个小的three.js + websocket游戏,我想一个服务器发送所有的模型通过websocket为每个球员,所以我希望有一个沉重的负载,我想控制。
我很乐意提供任何额外的信息。
先谢了。

i7uaboj4

i7uaboj41#

我对C++一无所知,但我对WebSockets略知一二。
另一个字节中有哪个值?当您发送FIN=0帧时,您仍然需要发送其中的帧选项。后续帧必须具有选项“Continuation”,并且没有其他选项。据我所知,Continuation帧甚至不能具有不同于0的RSV位。
如果发送FIN=0但没有类型(文本或二进制)的帧,则可能会失败。如果在FIN=0之后发送FIN=1但类型不是“Continuation”,则可能会失败。
所以关键是,你在第二个字节中发送的是什么?还有,如果你尝试使用谷歌浏览器并在控制台中检查为什么连接被关闭,那就太好了。

oxiaedzo

oxiaedzo2#

操作码:

|Opcode  | Meaning                             |  |
-+--------+-------------------------------------+-----------|
 | 0      | Continuation Frame                  |  |
-+--------+-------------------------------------+-----------|
 | 1      | Text Frame                          |  |
-+--------+-------------------------------------+-----------|
 | 2      | Binary Frame                        |  |
-+--------+-------------------------------------+-----------|
 | 8      | Connection Close Frame              |  |
-+--------+-------------------------------------+-----------|
 | 9      | Ping Frame                          |  |
-+--------+-------------------------------------+-----------|
 | 10     | Pong Frame                          |  |
-+--------+-------------------------------------+-----------|

相关问题