使用C++创建一个服务端类,使其能够接收来自客户端的信息,并打印,并且用.h和.cpp分开
时间: 2024-09-18 09:07:53 浏览: 42
为了创建一个服务端类,我们需要使用C++的网络库。在这个例子中,我们将使用Boost.Asio库。首先,创建一个名为`server.h`的头文件,其中包含服务器类的声明:
```cpp
// server.h
#ifndef SERVER_H
#define SERVER_H
#include <boost/asio.hpp>
#include <string>
class Server {
public:
Server(boost::asio::io_context& io_context, short port);
void start();
private:
void accept();
void handle_accept(const boost::system::error_code& error, boost::asio::ip::tcp::socket socket);
void read_data(boost::asio::ip::tcp::socket& socket);
boost::asio::io_context& io_context_;
boost::asio::ip::tcp::acceptor acceptor_;
};
#endif // SERVER_H
```
接下来,创建一个名为`server.cpp`的源文件,其中包含服务器类的实现:
```cpp
// server.cpp
#include "server.h"
#include <iostream>
Server::Server(boost::asio::io_context& io_context, short port)
: io_context_(io_context), acceptor_(io_context, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port)) {}
void Server::start() {
accept();
}
void Server::accept() {
acceptor_.async_accept([this](const boost::system::error_code& error, boost::asio::ip::tcp::socket socket) {
if (!error) {
std::cout << "New connection from " << socket.remote_endpoint() << std::endl;
read_data(socket);
}
accept();
});
}
void Server::handle_accept(const boost::system::error_code& error, boost::asio::ip::tcp::socket socket) {
if (!error) {
read_data(socket);
} else {
std::cerr << "Error accepting connection: " << error.message() << std::endl;
}
}
void Server::read_data(boost::asio::ip::tcp::socket& socket) {
boost::asio::async_read_until(socket, boost::asio::dynamic_buffer(buffer_), '
', [this, &socket](const boost::system::error_code& error, std::size_t bytes_transferred) {
if (!error) {
std::istream stream(&buffer_[0], &buffer_[bytes_transferred]);
std::string line;
std::getline(stream, line);
std::cout << "Received data: " << line << std::endl;
read_data(socket);
} else {
std::cerr << "Error reading data: " << error.message() << std::endl;
}
});
}
```
现在,你可以在主程序中使用这个服务端类。首先,确保你已经安装了Boost库并正确配置了项目。然后,创建一个名为`main.cpp`的文件,其中包含以下内容:
```cpp
// main.cpp
#include <iostream>
#include "server.h"
int main() {
try {
boost::asio::io_context io_context;
Server server(io_context, 12345);
server.start();
io_context.run();
} catch (std::exception& e) {
std::cerr << "Exception: " << e.what() << std::endl;
}
return 0;
}
```
编译并运行你的程序,它将在端口12345上启动一个服务端,接收来自客户端的信息并打印出来。
阅读全文