我想与 delphi6 进行 websocket 握手



我试图在Delphi6上使用hixie-76草案建立一个websocket服务器,我有一个握手的问题。

当我尝试它时,我与三个部分获得的md5指纹似乎不正确,但是当我使用协议规范中给出的示例相同的算法时,我得到了良好的md5响应…

我这样处理,转换在key1中找到的数字除以32位字中的空格数,与key2相同,最后添加最后8个字节(key3)以获得128位字符串,我将其用作md5条目。

使用155712099,173347027为key1和key2和'Tm[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

也许我的回答有另一个问题,但我的md5指纹似乎真的有问题。

有没有人看到我的错误在哪里??

提前感谢您的帮助

我看过这个单元,但除非我阅读能力很差,否则这个类的握手部分不计算任何md5和,我认为它使用的是旧版本的协议,而不是当前的(76)

当我查看下面的代码时,我看到答案是没有任何md5响应的。

的尝试//读取请求头handshakerrequest:= twebsocketrerequest . 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;结束,"

再次表示感谢

Update 2011 04 14

我终于找到问题在哪里了…

我是这样构建我的响应的:

resp := [...] +'Sec-WebSocket-Origin: '+ origin + #13#10 +
#13#10#13#10 +
md5response;
所以在md5指纹之前有3个0x0D 0x0A而不是2…

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

在Delphi的google代码中存在一个websocket类,它可能会给你答案:

http://code.google.com/p/delphiws/source/browse/trunk/source/uWebSocket.pas?r=4

相关内容

  • 没有找到相关文章

最新更新