linux c 实现http服务器 获取请求url
要在Linux下使用C语言实现一个HTTP服务器并获取请求的URL,你可以使用以下步骤:
- 创建一个TCP套接字并绑定到服务器的IP地址和端口号。
- 监听套接字以接受传入的连接请求。
- 接受连接请求并创建一个新的套接字来处理客户端请求。
- 从套接字中读取HTTP请求。
- 从HTTP请求中解析出请求的URL。
- 使用URL进行相应的处理和响应。
- 关闭套接字并返回到第3步以处理下一个连接请求。
以下是一个简单的示例代码,演示了如何实现上述步骤:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define PORT 8080
int main() {
int server_fd, new_socket;
struct sockaddr_in address;
int addrlen = sizeof(address);
char buffer[1024] = {0};
// 创建套接字
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
perror("socket failed");
exit(EXIT_FAILURE);
}
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons(PORT);
// 绑定套接字
if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {
perror("bind failed");
exit(EXIT_FAILURE);
}
// 监听
if (listen(server_fd, 3) < 0) {
perror("listen failed");
exit(EXIT_FAILURE);
}
while (1) {
// 接受连接请求
if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen)) < 0) {
perror("accept failed");
exit(EXIT_FAILURE);
}
// 读取HTTP请求
read(new_socket, buffer, 1024);
printf("Request:\n%s\n", buffer);
// 解析请求的URL
char *url = strtok(buffer, " ");
url = strtok(NULL, " ");
printf("URL: %s\n", url);
// 响应请求
char *response = "HTTP/1.1 200 OK\nContent-Type: text/plain\nContent-Length: 12\n\nHello World!";
write(new_socket, response, strlen(response));
close(new_socket);
}
return 0;
}
这段代码创建了一个TCP套接字并绑定到本地IP地址的8080端口。它监听传入的连接请求,并在接受请求后从套接字缓冲区中读取HTTP请求。然后,它使用strtok函数从HTTP请求中解析出URL,并将其打印出来。最后,它发送一个简单的响应给客户端。
请注意,这只是一个简单的示例,实际的HTTP服务器通常需要更复杂的逻辑来处理不同的请求方法(如GET、POST、PUT等)和处理静态文件、动态内容等。此外,还需要处理连接的并发性和错误情况
原文地址: http://www.cveoy.top/t/topic/iAsF 著作权归作者所有。请勿转载和采集!