#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#define PORT 8080
#define BUFFER_SIZE 1024
void handle_client(int client_socket) {
char buffer[BUFFER_SIZE];
memset(buffer, 0, sizeof(buffer));
// 读取客户端的请求
read(client_socket, buffer, sizeof(buffer) - 1);
printf("Received request:\n%s\n", buffer);
// 构造HTTP响应
char response[] = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<html><body><h1>Hello, this is a simple HTTP server</h1></body></html>";
// 发送响应给客户端
write(client_socket, response, sizeof(response) - 1);
// 关闭连接
close(client_socket);
}
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 == -1) {
perror("Error creating 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)) == -1) {
perror("Error binding socket");
exit(EXIT_FAILURE);
}
// 监听连接
if (listen(server_socket, 10) == -1) {
perror("Error listening on socket");
exit(EXIT_FAILURE);
}
printf("Server listening on port %d...\n", PORT);
while (1) {
// 接受客户端连接
client_socket = accept(server_socket, (struct sockaddr*)&client_addr, &client_addr_len);
if (client_socket == -1) {
perror("Error accepting connection");
continue;
}
// 处理客户端请求
handle_client(client_socket);
}
// 关闭服务器套接字
close(server_socket);
return 0;
}
这个简单的服务器监听端口8080,接受客户端连接,读取HTTP请求,然后返回一个简单的HTML响应。请注意,这只是一个基本示例,实际的Web服务器会处理更多的HTTP特性和错误情况。在实际的应用中,你可能需要使用更健壮的库或框架,如libevent、libuv或其他专门用于网络编程的库。