linux C语言建立一个http服务器
时间: 2024-01-21 07:02:07 浏览: 162
c语言实现http服务器
4星 · 用户满意度95%
要在 Linux 上使用 C 语言编写 HTTP 服务器,您可以使用 Sockets API 和 HTTP 解析器库。以下是一个简单的示例程序,它使用 Sockets API 创建一个 TCP 服务器并侦听来自客户端的请求,然后使用 HTTP 解析器库解析请求并发送响应。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <http_parser.h>
static int on_message_complete(http_parser *parser) {
int fd = *((int *) parser->data);
const char *response = "HTTP/1.1 200 OK\r\nContent-Length: 13\r\n\r\nHello, World!";
write(fd, response, strlen(response));
close(fd);
return 0;
}
int main() {
int server_fd, client_fd;
struct sockaddr_in server_addr, client_addr;
socklen_t client_len = sizeof(client_addr);
char buffer[1024];
http_parser_settings parser_settings;
http_parser parser;
http_parser_init(&parser, HTTP_REQUEST);
parser_settings.on_message_complete = on_message_complete;
parser.data = &client_fd;
server_fd = socket(AF_INET, SOCK_STREAM, 0);
if (server_fd < 0) {
perror("socket");
exit(1);
}
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
server_addr.sin_port = htons(8080);
if (bind(server_fd, (struct sockaddr *) &server_addr, sizeof(server_addr)) < 0) {
perror("bind");
exit(1);
}
if (listen(server_fd, 10) < 0) {
perror("listen");
exit(1);
}
while (1) {
client_fd = accept(server_fd, (struct sockaddr *) &client_addr, &client_len);
if (client_fd < 0) {
perror("accept");
continue;
}
http_parser_execute(&parser, &parser_settings, buffer, read(client_fd, buffer, 1024));
}
return 0;
}
```
这个程序利用 Sockets API 创建了一个 TCP 服务器,并绑定到 8080 端口。然后它进入一个无限循环,等待客户端连接。每当有一个客户端连接时,它使用 HTTP 解析器库解析请求,并使用 `on_message_complete` 函数发送响应。在本例中,响应是一个简单的 "Hello, World!" 字符串。
请注意,这只是一个简单的示例程序。在实际应用中,您需要添加错误处理、并发支持和更完整的 HTTP 功能。
阅读全文