2013-06-18 96 views
5

我试图接近尾声包从我的服务器发送到我的客户人为,什么原始值应该我送这样的客户会明白,我关闭连接?它不同于websocket协议?的WebSocket关闭分组

+0

客户端=? – dtb

+0

这是因为http://stackoverflow.com/questions/17175016/alchemy-forcefully-disconnect-client – Amy

+0

http://msdn.microsoft.com/en-us/library/system.net.websockets.websocket同样的问题.closeasync.aspx似乎是合适的。请显示你的尝试和什么不适合你。 –

回答

7

在最简单的级别 - 只需关闭连接 - 这将工作正常。

的非常早期hixie-76具有用于信令闭合一个简单的序列:只发送两个字节0xFF时,0×00(第一个是帧类型,第二个是长度)。

在所有以后的规格,帧是更复杂一点;它们被分解为:

  • (1个字节)的标志和操作码
  • (字节变量数)屏蔽标志和有效载荷长度
  • (可选,4个字节)掩模
  • ({长度}字节)有效载荷

对于第一部分,我们想要的操作码是0x08,并且这必须与“fin”标志,0x80(这只是表示该帧没有被拆分成多个消息)组合 - 所以0x88。对于第二部分,我们可以使用零长度消息,但是我们需要知道我们是客户端到服务器(总是被屏蔽的,所以我们需要使用0x80)或者服务器到客户端(从来不会蒙面,所以我们需要使用0x00)。

第三部分是如果掩模标记被设置,所以客户机到服务器包括在内;由于我们没有发送有效载荷,所以发明加密安全掩码没有意义 - 我们可以使用0x00 0x00 0x00 0x00。

第四,因为我们说明零长度被省略。

所以:客户端到服务器:均为0x88 0x80的0×00 0×00 0×00 0×00

和服务器到客户端:均为0x88为0x00

+0

我确实有访问原始协议层,我目前使用'process.context.Send(new字节[4] {80,01,00,00},真实,TRUE);',它似乎不同之处在于,收到'WebSocket连接到发挥最佳 'WS://本地主机:8000 /' 失败:压缩位必须如果没有协商的deflate-frame扩展错误,则为0。 – user2498443

+0

@user我同意它;你从哪里得到价值80?这是rsv1和rsv3集,操作码为零。你需要发送操作码8的fin位设置 - 小数136? (完成在我的脑海 - 我没有检查过这个值) –

+1

对不起,协议不同吗?我没有访问连接,我在C#中使用Alchemy,并且愚蠢地他们没有终止连接的方法。感谢所有帮助的人! :) – user2498443