用C++写一个接受网络请求并执行定时任务的例子
以下是一个使用C++编写的接受网络请求,并执行定时任务的例子:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <thread>
#include <chrono>
void handleRequest(int clientSocket) {
// 处理请求
// 这里可以根据实际需求进行相应的处理逻辑
// 例如,可以解析请求内容、执行相应的操作等
// 这里只是简单地向客户端发送一个回复消息
const char* response = "Hello from server!";
write(clientSocket, response, strlen(response));
close(clientSocket);
}
void acceptConnections() {
// 创建服务器套接字
int serverSocket = socket(AF_INET, SOCK_STREAM, 0);
if (serverSocket == -1) {
perror("Failed to create server socket");
exit(1);
}
// 绑定服务器地址和端口
sockaddr_in serverAddress{};
serverAddress.sin_family = AF_INET;
serverAddress.sin_addr.s_addr = INADDR_ANY;
serverAddress.sin_port = htons(8080);
if (bind(serverSocket, (struct sockaddr*)&serverAddress, sizeof(serverAddress)) == -1) {
perror("Failed to bind server socket");
exit(1);
}
// 开始监听连接请求
if (listen(serverSocket, 5) == -1) {
perror("Failed to listen for connections");
exit(1);
}
// 循环接受连接请求并处理
while (true) {
sockaddr_in clientAddress{};
socklen_t clientAddressLength = sizeof(clientAddress);
// 接受连接请求
int clientSocket = accept(serverSocket, (struct sockaddr*)&clientAddress, &clientAddressLength);
if (clientSocket == -1) {
perror("Failed to accept connection");
continue;
}
// 创建新线程处理请求
std::thread t(handleRequest, clientSocket);
t.detach();
}
close(serverSocket);
}
void runScheduledTask() {
// 定时任务,每隔1秒输出一次当前时间
while (true) {
auto now = std::chrono::system_clock::now();
time_t currentTime = std::chrono::system_clock::to_time_t(now);
std::cout << "Current time: " << ctime(¤tTime);
std::this_thread::sleep_for(std::chrono::seconds(1));
}
}
int main() {
// 创建一个新线程运行定时任务
std::thread t(runScheduledTask);
// 在主线程中运行接受连接的函数
acceptConnections();
return 0;
}
这个例子中,我们使用socket()函数创建了一个服务器套接字,并使用bind()函数将其绑定到指定的地址和端口上。然后,使用listen()函数开始监听连接请求。接下来,我们使用accept()函数接受连接请求,并在一个新的线程中处理请求。处理请求的函数handleRequest()在接收到请求后,会简单地向客户端发送一个回复消息。同时,我们在主线程中创建了另一个新的线程来运行定时任务,每隔1秒输出当前时间
原文地址: https://www.cveoy.top/t/topic/h69F 著作权归作者所有。请勿转载和采集!