创建一个简单的HTTP服务器使用C语言涉及到网络编程的基础,特别是使用套接字(sockets)进行网络通信。这里提供一个非常基础的HTTP服务器实现案例,该服务器能够监听HTTP请求,对简单的GET请求返回HTML页面。
准备工作
确保你的系统支持网络编程,并且安装了C语言编译器,如GCC。
HTTP服务器代码
以下是一个简单的HTTP服务器实现,它监听本地的8080端口,并对GET请求返回一个简单的HTML页面。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>#define PORT 8080void handle_request(int client_sock) {char buffer[1024];int valread = read(client_sock, buffer, 1024);printf("%s\n", buffer);const char *http_response = "HTTP/1.1 200 OK\nContent-Type: text/html\n\n<html><body><h1>Hello, World!</h1></body></html>";send(client_sock, http_response, strlen(http_response), 0);close(client_sock);
}int main() {int server_fd, new_socket;struct sockaddr_in address;int addrlen = sizeof(address);// 创建 socket 文件描述符if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {perror("socket failed");exit(EXIT_FAILURE);}// 定义 sockaddr_in 结构体变量,并初始化address.sin_family = AF_INET;address.sin_addr.s_addr = INADDR_ANY;address.sin_port = htons(PORT);// 绑定 socket 与 IP 地址和端口if (bind(server_fd, (struct sockaddr *)&address, sizeof(address))<0) {perror("bind failed");exit(EXIT_FAILURE);}// 监听端口if (listen(server_fd, 3) < 0) {perror("listen");exit(EXIT_FAILURE);}printf("Listening on port %d...\n", PORT);while(1) {if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen))<0) {perror("accept");exit(EXIT_FAILURE);}printf("Handling client %s\n", inet_ntoa(address.sin_addr));// 处理客户端请求handle_request(new_socket);// 可以在这里关闭 new_socket,但已在 handle_request 中关闭}return 0;
}
编译和运行
测试
打开浏览器或使用 curl
命令行工具,访问 http://localhost:8080
。你应该能看到页面显示 “Hello, World!”。