2011-04-07 83 views
1

我想在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 +
#13#10#13#10 +
md5response;
所以有3个0x0D 0x0A而不是2个md5指纹前...

因为我不能回答我自己的问题,我将无法标记它解决,但它是!:)

+0

欢迎堆栈溢出!如果您需要在答案下添加更多不适合作为评论的信息,请修改您的问题。 – 2011-04-10 21:30:30

回答