C++创建一个Server端的类,用来接收Client的数据并将消息打印出来
时间: 2024-09-21 15:02:39 浏览: 28
在C++中,我们可以使用socket编程来创建一个Server端的类,用来接收Client的数据并将消息打印出来。以下是一个简单的示例:
```cpp
#include <iostream>
#include <string>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
class Server {
public:
Server(int port) {
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == -1) {
std::cerr << "创建socket失败" << std::endl;
exit(1);
}
sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(port);
server_addr.sin_addr.s_addr = INADDR_ANY;
if (bind(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) {
std::cerr << "绑定端口失败" << std::endl;
exit(1);
}
if (listen(sockfd, 5) == -1) {
std::cerr << "监听失败" << std::endl;
exit(1);
}
}
void start() {
std::cout << "服务器启动,等待客户端连接..." << std::endl;
while (true) {
sockaddr_in client_addr;
socklen_t client_addr_len = sizeof(client_addr);
int new_sockfd = accept(sockfd, (struct sockaddr *)&client_addr, &client_addr_len);
if (new_sockfd == -1) {
std::cerr << "接受客户端连接失败" << std::endl;
continue;
}
std::cout << "客户端已连接" << std::endl;
char buffer[1024];
int bytes_received;
while ((bytes_received = recv(new_sockfd, buffer, sizeof(buffer), 0)) > 0) {
buffer[bytes_received] = '\0';
std::cout << "收到消息: " << buffer << std::endl;
}
close(new_sockfd);
}
}
private:
int sockfd;
};
int main() {
int port = 8080;
Server server(port);
server.start();
return 0;
}
```
这个示例中,我们创建了一个名为`Server`的类,它有一个构造函数,用于初始化socket并绑定到指定的端口。`start`方法用于启动服务器并监听客户端连接。当有客户端连接时,服务器会接收客户端发送的消息并将其打印出来。