windows C++创建一个服务端类,ip为127.0.0.1 端口为7799,并分为.h和.cpp
时间: 2024-09-20 10:13:42 浏览: 44
在Windows上用C++创建一个监听127.0.0.1端口7799的服务端程序,通常会涉及到`winsock2`库来处理网络通信。首先,我们需要分别创建一个`.h`头文件(用于声明接口)和一个`.cpp`实现文件(提供具体的函数)。以下是步骤和示例代码:
**server.h (头文件)**
```cpp
#pragma once
#include <winsock2.h>
#include <ws2tcpip.h>
class Server {
public:
// 构造函数
Server();
~Server();
// 开始监听
bool start(int port);
// 接收连接并处理请求
void handleConnection();
private:
SOCKET serverSocket; // 服务器套接字
sockaddr_in serverAddress;
};
```
**server.cpp (实现文件)**
```cpp
#include "server.h"
Server::Server() {
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
std::cerr << "Failed to initialize Winsock." << std::endl;
return;
}
serverSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (serverSocket == INVALID_SOCKET) {
closesocket(serverSocket);
WSACleanup();
throw std::runtime_error("Failed to create socket.");
}
serverAddress.sin_family = AF_INET;
serverAddress.sin_addr.s_addr = inet_addr("127.0.0.1");
serverAddress.sin_port = htons(port); // 将端口号转换为网络字节序
if (bind(serverSocket, (SOCKADDR*)&serverAddress, sizeof(serverAddress)) != 0) {
closesocket(serverSocket);
WSACleanup();
throw std::runtime_error("Failed to bind the socket.");
}
}
bool Server::start(int port) {
if (listen(serverSocket, SOMAXCONN) != 0) { // 设置最大并发连接数
closesocket(serverSocket);
WSACleanup();
return false;
}
return true;
}
void Server::handleConnection() {
sockaddr_in clientAddress;
socklen_t addrSize = sizeof(clientAddress);
SOCKET newSocket = accept(serverSocket, (SOCKADDR*)&clientAddress, &addrSize);
// 这里可以添加实际的连接处理逻辑,如读取数据、响应等
// ...
closesocket(newSocket);
}
// 添加析构函数清理资源
Server::~Server() {
closesocket(serverSocket);
WSACleanup();
}
```
为了使用这个服务,你需要在客户端通过相同的端口7799与其通信。当你需要启动服务时,只需创建`Server`实例并调用`start`方法即可。
阅读全文