linux c 实现简易HTTP服务器
时间: 2023-12-27 20:04:51 浏览: 27
要实现一个简易的HTTP服务器,可以按照以下步骤进行:
1. 创建Socket并绑定端口:使用socket函数创建一个套接字,并使用bind函数将其绑定到指定的端口。
2. 监听连接请求:使用listen函数监听来自客户端的连接请求。
3. 接受连接请求:使用accept函数接受连接请求,并返回一个新的套接字用于与客户端通信。
4. 接收请求并解析:使用recv函数接收客户端发送的请求数据,并解析出请求方法、请求路径、请求头等信息。
5. 处理请求:根据请求方法和请求路径,处理客户端的请求并返回相应的内容。
6. 发送响应:使用send函数将响应数据发送给客户端。
7. 关闭连接:使用close函数关闭与客户端的连接。
以下是一个简单的HTTP服务器示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#define PORT 8080
#define BUFFER_SIZE 1024
void handle_request(int client_socket) {
char buffer[BUFFER_SIZE];
char response[] = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<h1>Hello, World!</h1>";
recv(client_socket, buffer, BUFFER_SIZE, 0);
send(client_socket, response, strlen(response), 0);
close(client_socket);
}
int main() {
int server_socket, client_socket;
struct sockaddr_in server_addr, client_addr;
int addr_len = sizeof(client_addr);
// 创建Socket并绑定端口
server_socket = socket(AF_INET, SOCK_STREAM, 0);
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = INADDR_ANY;
server_addr.sin_port = htons(PORT);
bind(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr));
// 监听连接请求
listen(server_socket, 5);
while (1) {
// 接受连接请求
client_socket = accept(server_socket, (struct sockaddr *)&client_addr, &addr_len);
// 处理请求
handle_request(client_socket);
}
// 关闭Socket
close(server_socket);
return 0;
}
```
这段代码实现了一个简单的HTTP服务器,它会返回一个固定的HTML页面作为响应。你可以根据需要修改 handle_request 函数来处理不同的请求。