gpt4 book ai didi

c++ - C++编程错误中的Websocket服务器

转载 作者:可可西里 更新时间:2023-11-01 09:35:16 26 4
gpt4 key购买 nike

我正在尝试创建一个 websocket 服务器程序。这是握手代码。但是,当我尝试使用 chrome 进行连接时,连接断开了。检查一下,看看是否能发现任何错误。

iResult = recv(ClientSocket, recvbuf, recvbuflen, 0);
if (iResult > 0)
{

char *s = strstr(recvbuf,"Sec-WebSocket-Key:");
s = s + strlen("Sec-WebSocket-Key:");

char buff[200] = {};
int i = 0;
while((int)*s != 13)
{
if((int)*s != 32)
{
buff[i] = *s;
i++;
}
s++;
}
buff[i] = '\0';
strcat(buff,"258EAFA5-E914-47DA-95CA-C5AB0DC85B11");
hashwrapper *myWrapper = new sha1wrapper();
std::string hash(myWrapper->getHashFromString(buff));

std::string encoded = base64_encode(reinterpret_cast<const unsigned char*>(hash.c_str()), hash.length());

char * handshakeFormat = "HTTP/1.1 101 Web Socket Protocol Handshake\r\n"
"Upgrade: WebSocket\r\n"
"Connection: Upgrade\r\n"
"Sec-WebSocket-Accept: %s\r\n\r\n";

memset(recvbuf,0,sizeof(recvbuf));
sprintf(recvbuf,handshakeFormat,encoded.c_str());
iSendResult = send( ClientSocket, recvbuf, iResult, 0 );


delete myWrapper;
myWrapper = NULL;
}

用于测试目的:

key = "dGhlIHNhbXBsZSBub25jZQ=="

唯一键 = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"

sha1 哈希:“b37a4f2cc0624f1690f64606cf385945b2bec4ea”

这是由我的 sha1 哈希函数生成的。

根据 RFC6455 的实际 sha1 哈希:“0xb3 0x7a 0x4f 0x2c 0xc0 0x62 0x4f 0x16 0x90 0xf60x46 0x06 0xcf 0x38 0x59 0x45 0xb2 0xbe 0xc4 0xea”

base64 编码 = "YjM3YTRmMmNjMDYyNGYxNjkwZjY0NjA2Y2YzODU5NDViMmJlYzRlYQ=="

这是由我的 base64 编码器生成的

根据 RFC6455 的实际 base64 编码: "s3pPLMBiTxaQ9kYGzzhZRbK+xOo="

Google chrome 以以下格式发送握手数据:

GET /?encoding=text HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: localhost:2000
Origin: http://www.websocket.org
Sec-WebSocket-Key: SEvjVT+KuQHF0TRSdop3GA==
Sec-WebSocket-Version: 13

最佳答案

您必须对散列的字节值进行编码。现在,您正在将哈希值转换为十六进制字符串,然后再对其进行编码。

解码"s3pPLMBiTxaQ9kYGzzhZRbK+xOo="并将输出转换为十六进制字符串,您将看到它是B3 7A 4F 2C C0 62 4F 16 90 F6 46 06 CF 38 59 45 B2 BE C4 EA

“YjM3YTRmMmNjMDYyNGYxNjkwZjY0NjA2Y2YzODU5NDViMmJlYzRlYQ==”,另一方面,解码结果为(字符串)“b37a4f2cc0624f1690f64606cf385945b2bec4ea”

关于c++ - C++编程错误中的Websocket服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9624252/

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