Does boost::asio support websockets?

前端 未结 1 1571
春和景丽
春和景丽 2021-01-19 05:38

I posted a question earlier asking why does my server (written in C++ and boost::asio) can\'t connect with a client (written in Javascript). Is the problem that

相关标签:
1条回答
  • 2021-01-19 06:10

    Boost.Asio doesn't directly support WebSocket but there's this great open source library out there which is very closely modeled to Boost.Asio and works the way that you expect. You might give it a try, its header-only and uses just boost. It comes with example code and documentation: http://vinniefalco.github.io/

    Here's a complete program that sends a message to the echo server:

    #include <beast/websocket.hpp>
    #include <beast/buffers_debug.hpp>
    #include <boost/asio.hpp>
    #include <iostream>
    #include <string>
    
    int main()
    {
        // Normal boost::asio setup
        std::string const host = "echo.websocket.org";
        boost::asio::io_service ios;
        boost::asio::ip::tcp::resolver r(ios);
        boost::asio::ip::tcp::socket sock(ios);
        boost::asio::connect(sock,
            r.resolve(boost::asio::ip::tcp::resolver::query{host, "80"}));
    
        using namespace beast::websocket;
    
        // WebSocket connect and send message using beast
        stream<boost::asio::ip::tcp::socket&> ws(sock);
        ws.handshake(host, "/");
        ws.write(boost::asio::buffer("Hello, world!"));
    
        // Receive WebSocket message, print and close using beast
        beast::streambuf sb;
        opcode op;
        ws.read(op, sb);
        ws.close(close_code::normal);
        std::cout <<
            beast::debug::buffers_to_string(sb.data()) << "\n";
    }
    
    0 讨论(0)
提交回复
热议问题