C++编写服务端程序需要使用到网络编程和多线程技术。以下是一个简单的C++服务端程序示例,使用了TCP协议进行通信。
首先,我们需要包含必要的头文件并定义一个服务器类:
```cpp
#include
#include
#include
#include
#include
#include
#include
class Server {
public:
Server(int port) : stop(false) {
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
std::cerr << "Error creating socket" << std::endl;
exit(1);
}
struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(port);
inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr);
if (bind(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
std::cerr << "Error binding socket" << std::endl;
exit(1);
}
if (listen(sockfd, 5) < 0) {
std::cerr << "Error listening on socket" << std::endl;
exit(1);
}
}
void run() {
while (!stop) {
sockaddr_in client_addr;
socklen_t client_addr_size = sizeof(client_addr);
int new_sockfd = accept(sockfd, (struct sockaddr *)&client_addr, &client_addr_size);
if (new_sockfd < 0) {
std::cerr << "Error accepting connection" << std::endl;
continue;
}
std::thread t([this, new_sockfd]() {
char buffer[1024];
- int read_size = read(new_sockfd, buffer, sizeof(buffer)
- 1);
if (read_size <= 0) {
close(new_sockfd);
continue;
}
std::cout << "Received: " << buffer << std::endl;
});
t.detach();
}
}
private:
int sockfd;
bool stop;
};
```
接下来,我们需要创建一个主函数来启动服务端程序:
```cpp
int main(int argc, char *argv[]) {
if (argc != 2) {
std::cerr << "Usage: " << argv[0] << "
return 1;
}
int port = std::stoi(argv[1]);
Server server(port);
server.run();
return 0;
}
```
这个服务端程序会监听指定的端口,当有客户端连接时,它会创建一个新的线程来处理客户端的请求。在这个例子中,我们只是简单地将接收到的数据打印出来,但在实际应用中,你可能需要根据需求对数据进行处理或发送响应。