欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > 使用C++编写TCP服务端程序

使用C++编写TCP服务端程序

2024/10/24 14:26:52 来源:https://blog.csdn.net/semicolon_hello/article/details/140260307  浏览:    关键词:使用C++编写TCP服务端程序

要使用Boost.Asio库来开发一个TCP服务端程序,你需要遵循以下步骤。下面的示例代码将演示如何创建一个简单的异步TCP服务器,它能够接收客户端连接,并异步处理请求和响应。

首先,确保你已经安装了Boost库,并在你的项目中包含了asio库。

以下是基本的代码框架:

#include <boost/asio.hpp>
#include <boost/bind.hpp>
#include <boost/system/error_code.hpp>
#include <iostream>
#include <memory>using boost::asio::ip::tcp;class Server {
public:Server(boost::asio::io_context& io_context, short port): acceptor_(io_context, tcp::endpoint(tcp::v4(), port)){// 启动监听start_accept();}private:void start_accept() {// 创建新的socketstd::shared_ptr<tcp::socket> new_socket = std::make_shared<tcp::socket>(acceptor_.get_executor().context());// 异步接受连接acceptor_.async_accept(*new_socket,[this, new_socket](boost::system::error_code ec) {if (!ec) {std::cout << "New connection accepted." << std::endl;// 异步读取请求数据boost::asio::async_read(*new_socket, boost::asio::buffer(buffer_),[this, new_socket](boost::system::error_code ec, std::size_t length) {if (!ec) {// 处理请求(这里只是简单地将接收到的数据原样返回)boost::asio::async_write(*new_socket, boost::asio::buffer(buffer_, length),[new_socket](boost::system::error_code ec, std::size_t /*length*/) {if (ec) {std::cerr << "Error: " << ec.message() << std::endl;} else {std::cout << "Response sent successfully." << std::endl;}});} else {std::cerr << "Read failed: " << ec.message() << std::endl;}});// 继续监听下一个连接start_accept();} else {std::cerr << "Accept failed: " << ec.message() << std::endl;}});}tcp::acceptor acceptor_;char buffer_[1024];
};int main() {try {boost::asio::io_context io_context;Server s(io_context, 12345);io_context.run();}catch (std::exception& e) {std::cerr << e.what() << std::endl;}return 0;
}

在这个例子中:

  • 我们定义了一个Server类,它包含一个acceptor用于接受新连接。
  • start_accept函数用于启动异步接受过程,当有新的连接到达时,它会创建一个新的socket并绑定到一个lambda函数中,该函数处理读取请求、处理请求以及写入响应。
  • 请求数据被读取到buffer_中,然后原样返回给客户端。
  • 使用io_context.run()启动事件循环,处理所有的I/O操作。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com