gpt4 book ai didi

c++ - 服务器端的 WebSockets 握手回复,草稿 00

转载 作者:行者123 更新时间:2023-11-27 23:26:06 27 4
gpt4 key购买 nike

我正在编写一个应该同时支持 draft 17 的小型 WebSocket 服务器应用程序和较旧的变体,例如 draft 00 .我对最新的草稿没有任何问题,但我无法让草稿 00 的客户满意。

出于测试目的,我使用了官方(旧)中提供的示例 draft 00 docuemnt , 第 7 页:

Sec-WebSocket-Key1: 18x 6]8vM;54 *(5:  {   U1]8  z [  8
Sec-WebSocket-Key2: 1_ tx7X d < nw 334J702) 7]o}` 0

Tm[K T2u

通过连接数字并除以空格计数来计算 key 时,我得到以下两个整数:155712099173347027(文档中也有这两个数字).

接下来,它说:

  1. 将它们单独转换为 Big Endian
  2. 将结果连接成一个字符串并附加最后八位 (Tm[K T2u)。
  3. 从步骤 1 和 2 中生成的字符串创建 128 位 MD5 和。

有了这些知识,我编写了以下代码:

#define BYTE    8
#define WORD 16

// Little Endian to Big Endian short
#define LE_TO_BE_SHORT(SHORT)\
(((SHORT >> BYTE) & 0x00FF) | ((SHORT << BYTE) & 0xFF00))

// Little Endian to Big Endian long
#define LE_TO_BE_LONG(LONG)\
(((LE_TO_BE_SHORT(LONG >> WORD)) | \
((LE_TO_BE_SHORT((LONG & 0xFFFF)) << WORD))))

uint num1 = LE_TO_BE_LONG(155712099);
uint num2 = LE_TO_BE_LONG(173347027);

QString cookie = QString::fromUtf8("Tm[K T2u");
QString c = QString::number(num1) + QString::number(num2) + cookie;

QByteArray data = c.toUtf8();
qDebug() << QCryptographicHash::hash(data, QCryptographicHash::Md5);

这是我得到的:

←→»α√r¼??┐☺║Pa♠µ

这是预期的结果(再次基于草稿示例)

fQJ,fN/4F4!~K~MH

另一方面,我注意到 wikipedia article没有提及任何有关 Endian 转换的内容。我在没有转换的情况下尝试了上面的代码(维基百科示例和草稿中的示例)仍然无法重现预期结果。

谁能指出这里的问题是什么?


编辑:

我找到了 this document对协议(protocol)有更好的解释。它是一个不同的草案(76),但在握手方面与 00 相似。

最佳答案

Herewebsockify 的 C 实现中的计算.我知道这行得通,因此您可以将其用作引用。

关于c++ - 服务器端的 WebSockets 握手回复,草稿 00,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9400385/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com