#include <iostream>
#include <string>
#include <boost/asio.hpp>
#include <boost/beast.hpp>
namespace http = boost::beast::http;
namespace net = boost::asio;
class WebServer {
public:
WebServer(net::io_context& io_context, short port)
: acceptor_(io_context, net::ip::tcp::endpoint(net::ip::tcp::v4(), port)) {
start_accept();
}
private:
void start_accept() {
socket_ = std::make_shared<net::ip::tcp::socket>(acceptor_.get_executor().context());
acceptor_.async_accept(*socket_, [this](boost::system::error_code ec) {
if (!ec) {
handle_request();
}
start_accept();
});
}
void handle_request() {
http::request<http::string_body> req;
http::read(*socket_, buffer_, req);
http::response<http::string_body> res{http::status::ok, req.version()};
res.set(http::field::server, "MyWebServer");
res.set(http::field::content_type, "text/plain");
res.keep_alive(req.keep_alive());
res.body() = "Hello, World!";
res.prepare_payload();
http::write(*socket_, res);
}
net::ip::tcp::acceptor acceptor_;
std::shared_ptr<net::ip::tcp::socket> socket_;
net::streambuf buffer_;
};
int main() {
try {
net::io_context io_context;
WebServer server(io_context, 8080);
io_context.run();
} catch (std::exception& e) {
std::cerr << "Exception: " << e.what() << "\n";
}
return 0;
}
引入必要的库:
#include <iostream> 和 #include <string> 是标准 C++ 库。#include <boost/asio.hpp> 和 #include <boost/beast.hpp> 是 Boost.Asio 和 Boost.Beast 库,用于处理网络通信和 HTTP 协议。命名空间别名:
namespace http = boost::beast::http; 和 namespace net = boost::asio; 用于简化代码中的命名空间引用。WebServer 类:
acceptor_),并调用 start_accept() 开始接受连接。start_accept() 方法异步接受客户端连接,并在连接建立后调用 handle_request() 处理请求。handle_request() 方法读取 HTTP 请求,构建响应,并将响应写回客户端。main 函数:
io_context 实例,并启动 Web 服务器监听 8080 端口。io_context.run() 进入事件循环,等待并处理连接。这个示例展示了如何使用 C++ 和 Boost 库创建一个简单的 HTTP 服务器。
上一篇:c++ access
下一篇:c++ const关键字
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站