Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
I';I’我想与delphi6进行websocket握手_Delphi_Md5_Websocket_Delphi 6_Handshake - Fatal编程技术网

I';I’我想与delphi6进行websocket握手

I';I’我想与delphi6进行websocket握手,delphi,md5,websocket,delphi-6,handshake,Delphi,Md5,Websocket,Delphi 6,Handshake,我正在尝试使用hixie-76草案在Delphi6上构建websocket服务器,但我在握手方面遇到了问题 我用这三个部分得到的md5指纹在我尝试时似乎不正确,但当我使用protocole规范中给出的示例的相同算法时,我得到了良好的md5响应 我是这样处理的,将key1中的数字除以32位字中的空格数,与key2相同,最后加上最后8个字节(key3),得到一个128位的字符串,我用它作为md5条目 将155712099、173347027用于key1和key2,并将“Tm[K T2u”用于key3

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

我用这三个部分得到的md5指纹在我尝试时似乎不正确,但当我使用protocole规范中给出的示例的相同算法时,我得到了良好的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响应的情况下编写的

`试一试 //读取请求头 握手请求:=TWebSocketRequest.Create(服务器连接)

除了 在E:TWebSocketHandshakeException do上 开始 //如果握手失败,请关闭连接 服务器连接。断开连接; 结束;`

再次感谢

更新2011 04 14

我终于找到了问题所在

我的反应是这样的:

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


由于我无法回答自己的问题,我将无法标记它已解决,但它是!:)

在google code for Delphi中存在一个websocket类,它可能会为您提供答案:


在google code for Delphi中存在一个websocket类,它可能会为您提供以下答案:


欢迎使用Stack Overflow!如果您需要在答案下添加更多不适合作为注释的信息,请编辑您的问题。欢迎使用Stack Overflow!如果您需要在答案下添加更多不适合作为注释的信息,请编辑您的问题。
// 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;