WebSocket关闭数据包

时间:2013-06-18 19:02:58

标签: c#

我试图从我的服务器人工发送一个关闭数据包到我的客户端,我应该发送什么原始值,以便客户端了解我正在关闭连接? websocket协议之间有区别吗?

1 个答案:

答案 0 :(得分:7)

在最简单的级别 - 只需关闭连接 - 这样就可以了。

早期的hixie-76有一个简单的信令闭包序列:只发送两个字节0xFF,0x00(第一个是帧类型,第二个是长度)。

在所有后来的规范中,帧都有点复杂;它们被分解为:

  • (1字节)标志和操作码
  • (可变字节数)掩码标志和有效负载长度
  • (可选,4个字节)掩码
  • ({length} bytes)payload

对于第一部分,我们想要的操作码是0x08,这必须与“fin”标志组合,0x80(这只表示帧没有分成几条消息) - 所以0x88。

对于第二部分,我们可以使用零长度消息,但我们需要知道我们是客户端到服务器(总是被屏蔽,所以我们需要使用0x80)或服务器到客户端(从不屏蔽) ,所以我们需要使用0x00)。

如果设置了掩码标志,则第三部分仅包含 ,因此客户端到服务器;因为我们没有发送有效载荷,所以没有必要发明一个加密安全掩码 - 我们可以使用0x00 0x00 0x00 0x00。

第四个被省略,因为我们说的是零长度。

所以:客户端到服务器:0x88 0x80 0x00 0x00 0x00 0x00

服务器到客户端:0x88 0x00