【问题标题】:I'd like to make a websocket handshake with delphi6我想用delphi6做一个websocket握手
【发布时间】:2011-04-07 15:45:13
【问题描述】:

我正在尝试使用草稿 hixie-76 在 Delphi6 上构建 websocket 服务器,但我遇到了握手问题。

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

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

对 key1 和 key2 使用 155712099、173347027 和对 key3 使用 'Tm[K T2u',我得到了正确的 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 响应的情况下编写的。

` 试试 // 读取请求头 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 做 开始 // 如果握手失败则关闭连接 服务器连接。断开连接; 结束;`

再次感谢

更新 2011 04 14

我终于找到问题所在了……

我是这样构建我的回复的:

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

由于我无法回答我自己的问题,我无法将其标记为已解决,但确实如此! :)

【问题讨论】:

  • 欢迎来到 Stack Overflow!如果您需要在答案下方添加更多不适合作为评论的信息,请编辑您的问题。

标签: delphi md5 websocket delphi-6 handshake


【解决方案1】:

在谷歌代码中有一个用于 Delphi 的 websocket 类,它可能会给你答案:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多