python,from flask import Flask,app = Flask(__name__)@app.route('/'),def hello_world():, return 'Hello, World!'if __name__ == '__main__':, app.run(),
“
创建一个基于C语言的简单Web服务器涉及多个步骤,包括网络编程、HTTP协议处理以及多线程或多进程管理,以下是一个详细的指南,帮助你从零开始构建一个基本的Web服务器。
在开始编写代码之前,确保你的开发环境中安装了必要的工具和库:
编译器:GCC或其他支持C99标准的编译器。
编辑器:如VS Code、Vim或Emacs。
调试器:GDB(可选)。
组织项目文件结构,
/my_web_server |-src | |-main.c | |-server.c | |-server.h |-include | |-(存放第三方库头文件) |-Makefile
a. 主程序入口 (main.c
)
#include "server.h" int main(int argc, char *argv[]) { if (argc < 2) { fprintf(stderr, "Usage: %s <port> ", argv[0]); exit(EXIT_FAILURE); } int port = atoi(argv[1]); start_server(port); return 0; }
b. 服务器核心逻辑 (server.c
&server.h
)
server.h
:
#ifndef SERVER_H #define SERVER_H void start_server(int port); #endif // SERVER_H
server.c
:
#include "server.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <pthread.h> #define BUFFER_SIZE 1024 void handle_client(int client_sock); void *thread_function(void *arg); void start_server(int port) { int server_sock, client_sock; struct sockaddr_in server_addr, client_addr; socklen_t client_len = sizeof(client_addr); pthread_t thread; server_sock = socket(AF_INET, SOCK_STREAM, 0); if (server_sock < 0) { perror("Socket creation failed"); exit(EXIT_FAILURE); } memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = INADDR_ANY; server_addr.sin_port = htons(port); if (bind(server_sock, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) { perror("Bind failed"); close(server_sock); exit(EXIT_FAILURE); } if (listen(server_sock, 5) < 0) { perror("Listen failed"); close(server_sock); exit(EXIT_FAILURE); } printf("Server is listening on port %d... ", port); while (1) { client_sock = accept(server_sock, (struct sockaddr *)&client_addr, &client_len); if (client_sock < 0) { perror("Accept failed"); continue; } if (pthread_create(&thread, NULL, thread_function, (void *)&client_sock) != 0) { perror("Thread creation failed"); close(client_sock); } } close(server_sock); } void *thread_function(void *arg) { int client_sock = *((int *)arg); free(arg); handle_client(client_sock); close(client_sock); pthread_exit(NULL); } void handle_client(int client_sock) { char buffer[BUFFER_SIZE]; int bytes_read; bytes_read = recv(client_sock, buffer, BUFFER_SIZE 1, 0); if (bytes_read > 0) { buffer[bytes_read] = '