#include <boost/beast/core.hpp>
#include <boost/beast/websocket.hpp>
#include <iostream>
#include <string>
#include <thread>
using tcp = boost::asio::ip::tcp;
int main(){
auto const address = boost::asio::ip::make_address("127.0.0.1");
auto const port = static_cast<unsigned short>(std::atoi("8083"));
boost::asio::io_context ioc{1};
tcp::acceptor acceptor{ioc,{address,port}};
while(1){
tcp::socket socket{ioc};
acceptor.accept(socket);
std::cout<<"socket accepted"<<std::endl;
std::thread{[q = std::move(socket)]() mutable {
boost::beast::websocket::stream<tcp::socket> ws {std::move(q)};
ws.accept();
while(1){
boost::beast::flat_buffer buffer;
ws.read(buffer);
auto out = boost::beast::buffers_to_string(buffer.cdata());
std::cout<<out<<std::endl;
}
}}.detach();
}
return 0;
}
这是我的代码,它给了我这个错误 => WebSocket 握手连接字段缺少升级令牌 请帮我解决它。
我读过一些文章,有人说你可以在更改浏览器后尝试,但仍然面临同样的问题。
连接客户端未正确发送 websocket 升级请求。
有效的请求看起来像这样
GET /path HTTP/1.1
Host: localhost:8083
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: vWJaQvnm4qm1AUccLfSmBw==
单元测试显示什么样的请求会提示您显示的错误,例如
HTTP/1.1 101 Switching Protocols
Server: beast
Upgrade: WebSocket
Connection: keep-alive
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Version: 13
如您所见,
Connection
标头的值错误。我使用 websocat
测试了你的代码,它工作正常。检查您的客户端是否意外地需要 HTTP 服务器或使用 WSS(安全 Websocket)。