std::string data((const char*)buf->data(),bytes_transferred);
recycle_buffer(buf);
std::string key="Sec-WebSocket-Key:";
auto pos = data.find(key);
auto posEnd = data.find("\r\n",pos);
auto value = data.substr(pos + key.length(),posEnd - (pos + key.length()));
std::string sha1Src = trim(value);
sha1Src += std::string("258EAFA5-E914-47DA-95CA-C5AB0DC85B11");
unsigned char sha1out[20];
sha1((const unsigned char *)sha1Src.c_str(),sha1Src.length(),sha1out);
std::vector<unsigned char> data64;
for( auto c: sha1out) data64.push_back(c);
std::ostringstream os_rsp;
os_rsp<<"HTTP/1.1 101 Switching Protocols\r\n"
<<"Upgrade: websocket\r\n"
<<"Connection: Upgrade\r\n"
<<"Sec-WebSocket-Accept: "<<base64Encode(data64)<<"=\r\n"
<
Web Socket rfc6455 握手 (C++)
最新推荐文章于 2022-01-02 21:56:15 发布
本文详细介绍了如何使用C++实现WebSocket的RFC6455握手过程,包括连接建立后客户端的握手协议数据处理,重点讲解了`Sec-WebSocket-Key`的计算,与GUID字符串拼接生成`sha1Src`,接着计算SHA1值得到`sha1Out`,最后通过Base64编码生成`Sec-WebSocket-Accept`响应头的关键步骤。
摘要由CSDN通过智能技术生成