编写一个HTTP服务器并记录日志是一个相对复杂的任务,但通过分步骤实现可以逐步完成,下面我将展示如何用C语言编写一个简单的HTTP服务器,并添加日志记录功能。
准备工作
我们需要一些基本的库和头文件:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h> #include <time.h>
定义常量和全局变量
定义一些常量和全局变量,例如端口号、缓冲区大小等:
#define PORT 8080 #define BUFFER_SIZE 1024 #define LOG_FILE "server.log"
日志记录函数
编写一个函数来记录日志信息:
void log_message(const char *message) { FILE *log_file = fopen(LOG_FILE, "a"); if (log_file == NULL) { perror("Failed to open log file"); return; } time_t now = time(NULL); char *timestamp = ctime(&now); timestamp[strlen(timestamp) 1] = '�'; // Remove newline character fprintf(log_file, "[%s] %sn", timestamp, message); fclose(log_file); }
HTTP响应处理函数
编写一个函数来处理HTTP请求并生成响应:
void handle_http_request(int client_socket) { char buffer[BUFFER_SIZE]; int bytes_read = read(client_socket, buffer, sizeof(buffer) 1); if (bytes_read < 0) { perror("Failed to read from socket"); return; } buffer[bytes_read] = '�'; // Log the request log_message(buffer); // Simple HTTP response const char *response = "HTTP/1.1 200 OKrn" "ContentType: text/plainrn" "Connection: closern" "rn" "Hello, World!"; write(client_socket, response, strlen(response)); }
主函数
在主函数中创建套接字,绑定端口,监听连接,并接受客户端请求:
int main() { int server_socket, client_socket; struct sockaddr_in server_addr, client_addr; socklen_t client_addr_len = sizeof(client_addr); server_socket = socket(AF_INET, SOCK_STREAM, 0); if (server_socket < 0) { perror("Failed to create socket"); exit(EXIT_FAILURE); } server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = INADDR_ANY; server_addr.sin_port = htons(PORT); if (bind(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) { perror("Failed to bind socket"); close(server_socket); exit(EXIT_FAILURE); } if (listen(server_socket, 10) < 0) { perror("Failed to listen on socket"); close(server_socket); exit(EXIT_FAILURE); } log_message("Server started and listening for connections..."); while (1) { client_socket = accept(server_socket, (struct sockaddr *)&client_addr, &client_addr_len); if (client_socket < 0) { perror("Failed to accept connection"); continue; } handle_http_request(client_socket); close(client_socket); } close(server_socket); return 0; }
编译和运行
将上述代码保存为http_server.c
,然后使用以下命令进行编译和运行:
gcc http_server.c o http_server ./http_server
测试服务器
打开浏览器或使用curl
命令访问服务器:
curl http://localhost:8080
你应该会看到“Hello, World!”的响应,并且服务器日志文件server.log
中会记录请求信息。
是一个简单的HTTP服务器示例,它能够处理基本的HTTP请求并记录日志,这个示例展示了如何使用C语言编写网络程序,包括套接字编程、HTTP协议处理和日志记录,根据实际需求,你可以进一步扩展和完善这个服务器,例如支持更多的HTTP方法、处理静态文件、增加错误处理等功能。
小伙伴们,上文介绍了“C语言编写HTTP服务器日志记录代码 (c 编写http服务器写日志代码)”的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1236579.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复