c++ WebSocket 建立连接
时间: 2023-11-28 16:49:27 浏览: 96
websocket c++
4星 · 用户满意度95%
在 C++ 中建立 WebSocket 连接通常需要使用第三方库来实现。常用的库有 Boost.Beast 和 WebSocket++。
以下是使用 Boost.Beast 建立 WebSocket 连接的示例代码:
```c++
#include <boost/beast/core.hpp>
#include <boost/beast/websocket.hpp>
#include <boost/asio/ip/tcp.hpp>
#include <iostream>
int main() {
namespace beast = boost::beast; // from <boost/beast.hpp>
namespace http = beast::http; // from <boost/beast/http.hpp>
namespace websocket = beast::websocket; // from <boost/beast/websocket.hpp>
namespace net = boost::asio; // from <boost/asio.hpp>
using tcp = boost::asio::ip::tcp; // from <boost/asio/ip/tcp.hpp>
try {
// 初始化 asio 库
net::io_context ioc;
// 建立 TCP 连接
tcp::resolver resolver(ioc);
auto const results = resolver.resolve("echo.websocket.org", "80");
tcp::socket ws_sock(ioc);
net::connect(ws_sock, results.begin(), results.end());
// 建立 WebSocket 连接
websocket::stream<tcp::socket> ws(ioc);
ws.handshake("echo.websocket.org", "/");
// 发送消息
ws.write(net::buffer(std::string("Hello, world!")));
// 接收消息
beast::flat_buffer buffer;
ws.read(buffer);
std::cout << beast::make_printable(buffer.data()) << std::endl;
// 关闭 WebSocket 连接
ws.close(websocket::close_code::normal);
return 0;
} catch (std::exception const& e) {
std::cerr << "Error: " << e.what() << std::endl;
return 1;
}
}
```
这段代码使用 Boost.Beast 库建立了一个到 `echo.websocket.org` 的 WebSocket 连接,并发送了一条消息。接收到的消息也被输出到了控制台上。最后,关闭了 WebSocket 连接。
需要注意的是,建立 WebSocket 连接时,可以指定 WebSocket 的 URI 路径。在上面的示例中,使用了默认的路径 `/`。如果需要使用其他路径,可以在 `ws.handshake()` 方法中指定。
阅读全文