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"
<<"\r\n";
std::string rsp = os_rsp.str();
1) data 为连接建立以后,web socket客户端发送的握手协议。<

本文详细介绍了如何使用C++实现WebSocket的RFC6455握手过程,包括连接建立后客户端的握手协议数据处理,重点讲解了`Sec-WebSocket-Key`的计算,与GUID字符串拼接生成`sha1Src`,接着计算SHA1值得到`sha1Out`,最后通过Base64编码生成`Sec-WebSocket-Accept`响应头的关键步骤。
最低0.47元/天 解锁文章
132

被折叠的 条评论
为什么被折叠?



