我想做一个与delphi6 websocket握手
我想在Delphi6上使用草案hixie-76构建一个websocket服务器,我有一个握手问题。我想做一个与delphi6 websocket握手
的MD5指纹我与三个部分得到似乎不正确当我尝试它,但是当我使用相同的algorythm与在protocole规范我得到了很好的MD5响应给出为例...
我正在这样处理,将key1中的数字除以32位字中的空格数,与key2相同,最后加上最后8个字节(key3),得到一个128位的字符串,我将其用作md5条目。
使用155712099,173347027的键1和键2和“以旧换新[K T2U”的KEY3,我得到正确的MD5指纹,所以我不明白为什么这个算法中不会给一个正确的指纹给客户
这里是我所收到的为例:
GET/HTTP/1.1
Upgrade: WebSocket
Connection: Upgrade
Host: localhost:8018
Origin: null
Sec-WebSocket-Key1: 4 102(2 6U 2 3 18
Sec-WebSocket-Key2: 69V86`6t)e 0 2 42
M]Rzÿõ&
和握手我给响应
HTTP/1.1 101 WebSocket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Origin: null
Sec-WebSocket-Location: ws://localhost:8018/
µ&Mq˜8èõÙZÙ,hœi
Maybye有一个与我的反应,但雷尔另一个probleme似乎我的md5指纹有问题。
有没有人看到我的错误在哪里?
在此先感谢您的帮助
更新
我已经看到了这个单位,但除非我的阅读很差劲,这个类的握手部分不计算任何MD5校验,我认为它使用协议的旧版本,而不是当前(76)
当我看下面的代码,我看到答案写入没有任何MD5响应。
`尝试 //读取请求标头 HandshakeRequest:= TWebSocketRequest.Create(ServerConnection);
// Send response headers
ServerConnection.WriteLn('HTTP/1.1 101 Web Socket Protocol Handshake');
ServerConnection.WriteLn('Upgrade: WebSocket');
ServerConnection.WriteLn('Connection: Upgrade');
ServerConnection.WriteLn('WebSocket-Origin: ' + HandshakeRequest.Origin);
ServerConnection.WriteLn('WebSocket-Location: ws://' + HandshakeRequest.Host + '/');
// End handshake
ServerConnection.WriteLn;
ServerConnection.WriteLn;
HandshakeResponseSent := True;
除了 在E:TWebSocketHandshakeException做 开始 //关闭连接,如果握手失败 ServerConnection.Disconnect; 结束;`
再次感谢
更新2011年4月14
我终于发现问题出在哪里了......
我是建设一样,我的回应:
resp := [...] +'Sec-WebSocket-Origin: '+ origin + #13#10 +
所以有3个0x0D 0x0A而不是2个md5指纹前...
#13#10#13#10 +
md5response;
因为我不能回答我自己的问题,我将无法标记它解决,但它是!:)
存在着德尔福在谷歌代码的WebSocket类可能给你答案:
http://code.google.com/p/delphiws/source/browse/trunk/source/uWebSocket.pas?r=4
欢迎堆栈溢出!如果您需要在答案下添加更多不适合作为评论的信息,请修改您的问题。 – 2011-04-10 21:30:30