WebSocket 握手连接字段缺少升级令牌

问题描述 投票:0回答:1
#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 boost
1个回答
0
投票

连接客户端未正确发送 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)。

© www.soinside.com 2019 - 2024. All rights reserved.