【求助】C++实现的WebSocket Server握手失败,这是啥情况T.T
Server用的是这一段C++代码http://hi.baidu.com/_sivis_/blog/item/7362889ac15addbec9eaf4a1.html
Client用的是这一段HTML5代码
http://blancer.com/tutorials/69066/start-using-html5-websockets-today/
具体的服务器地址之类的已经根据自己的情况修改了,C++代码中copy时产生的符号问题比如& lt换成<之类的也都做完了……总之编译调试都正常,两边也能成功进行握手信息交换
问题是如果用原Server代码中的握手信息:
"HTTP/1.1 101 Web Socket Protocol Handshake\r\n"
"Upgrade: WebSocket\r\n"
"Connection: Upgrade\r\n"
"WebSocket-Origin: http://localhost:808\r\n
"WebSocket-Location: ws://localhost:808/ws\r\n\r\n"
进行握手,Client端的socket会永远保持connecting状态
查了一些其他的demo,有些比这个多一行
"WebSocket-Protocol: sample\r\n"
但是加了这一行之后Client的socket会立刻从connecting进入closed状态……都不带进入open的,应该是直接握手失败了
具体地,我又加了两行输出client ip的代码测试了一下,发现在不添加那一行Protocol的时候,服务器可以正常发送完握手信息,然后调用CreateThread创建线程,直到这里都一直可以检测到client ip,只是client一直保持connecting无法完成握手;在添加那一行之后,握手信息发送完毕时依然可以正确检测到client ip,但接下来调用CreateThread之后socket立即就断开了,显示client ip = 0.0.0.0
不知道是什么情况= = 应该是 Sec-WebSocket-Protocol 吧
http://www.whatwg.org/specs/web-socket-protocol/
我不懂WebServer编写,随便说说的
页:
[1]