嘎巴 发表于 2010-12-8 19:15

【求助】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

不知道是什么情况= =

tency 发表于 2010-12-8 21:17

应该是 Sec-WebSocket-Protocol 吧

http://www.whatwg.org/specs/web-socket-protocol/

我不懂WebServer编写,随便说说的
页: [1]
查看完整版本: 【求助】C++实现的WebSocket Server握手失败,这是啥情况T.T