要在 Linux 下使用 C 语言实现一个 HTTP 服务器并获取请求的 URL,你可以使用以下步骤:

  1. 创建一个 TCP 套接字并绑定到服务器的 IP 地址和端口号。
  2. 监听套接字以接受传入的连接请求。
  3. 接受连接请求并创建一个新的套接字来处理客户端请求。
  4. 从套接字中读取 HTTP 请求。
  5. 从 HTTP 请求中解析出请求的 URL。
  6. 使用 URL 进行相应的处理和响应。
  7. 关闭套接字并返回到第 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:
%s
", buffer);
        
        // 解析请求的 URL
        char *url = strtok(buffer, " ");
        url = strtok(NULL, " ");
        printf("URL: %s
", 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 等)和处理静态文件、动态内容等。此外,还需要处理连接的并发性和错误情况。

Linux C 实现 HTTP 服务器并获取请求 URL

原文地址: https://www.cveoy.top/t/topic/qhsR 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录