我用c ++编写了一个websocket服务器,可以使用websocket协议00(带有key1的一个,握手头中的key2)。
现在有了新的更新,我正在努力为新的握手工作做同样的事情。这是我对握手请求的服务器响应:
“HTTP / 1.1 101切换协议\ r \ n升级:websocket \ r \ n连接:升级\ r \ nSec-WebSocket-Accept:”+ serverKey +“\ r \ n \ r \ n”;
正确计算serverkey。举个例子:
握手请求:
GET /测试HTTP / 1.1
升级:websocket
连接:升级
主持人:192.168.123.102:8585
Sec-WebSocket-Origin:http://192.168.123.5
Sec-WebSocket-Key:YB0mPvJ5t8ggCeGUWY39uQ ==
Sec-WebSocket-Version:8
握手回复标题:
HTTP / 1.1 101交换协议
升级:websocket
连接:升级
Sec-WebSocket-Accept:xt9iyCNryQTseELUkHPWjzxA2ts =
我也用http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-08中的示例检查我的算法,它产生了完全相同的响应。
但是我仍然收到以下错误:
“WebSocket握手期间出错:Sec-WebSocket-Accept不匹配”
我使用chrome 15作为浏览器。
你知道出了什么问题吗?
(同样在Chrome检查员网络中,它不会显示不接受握手的情况下的响应(即使是旧版本))
答案 0 :(得分:2)
我实际上发现了什么是主要问题。
我用于base64编码的密钥是
YB0mPvJ5t8ggCeGUWY39uQ==
258EAFA5-E914-47DA-95CA-C5AB0DC85B11
而不是
YB0mPvJ5t8ggCeGUWY39uQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11
额外的\ n是整个问题。
HOWEVER ,现在我收到了Connected消息(ws客户端已成功连接到ws服务器)我无法发送或接收任何内容。问题是服务器端。
你知道自旧的websocket协议以来服务器端的变化是什么?我只改变了我的握手反应,看起来不够。
答案 1 :(得分:2)
客户端发送数据时有一个不同的成帧协议。以前这很简单。现在它要复杂得多。请参阅websockets rfc6455规范。