握手后的Websocket消息

时间:2015-06-19 10:15:44

标签: c++ websocket frame handshake

我在服务器上用C ++进行了websocket通信。我有websocket协议的问题。当我以文本格式获得握手消息时,我进行握手响应并以文本格式发送回来并打开连接,但是当我向浏览器发回第二条消息时,连接失败。 但是如果我在第一条消息上将握手答案放在框架中,以后一切正常,我就不会遇到其他消息的问题。

Mozzila firefox:在加载页面时,与ws:// localhost /的连接被中断。 谷歌浏览器:WebSocket连接到' ws:// localhost /'失败:服务器不得屏蔽它发送给客户端的任何帧。

我不会掩盖任何帧。

这适用于Mozzila firefox和google chrome,但不适用于safari。 那么,有谁知道问题是什么?有没有人有这个问题?

由于

1 个答案:

答案 0 :(得分:0)

您说您没有屏蔽任何帧(从服务器到客户端),在您要发回的数据中,请检查第二个字节的第一位。

根据RFC6445,在向客户端发送数据时,必须将第二个字节的第一位(掩码标志)设置为0。如果您的框架设置不正确且该位设置为1,浏览器将抱怨“服务器不得屏蔽它发送给客户端的任何帧”

这也可能与您无关,但检查您的代码的升级/握手部分中没有任何尾随数据,当处理Web套接字时,有一个尾随的chr(0)(空字符)导致问题对我来说,当我试图发送客户数据时。