在C语言中,编写服务器代码通常涉及使用socket编程,以下是一个简单的示例,展示了如何使用C语言编写一个基本的TCP服务器,这个服务器会监听一个端口,等待客户端的连接请求,并在接收到客户端消息后回复一条消息。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h> #define PORT 8080 #define BACKLOG 5 #define BUFFER_SIZE 1024 int main() { int server_fd, client_fd; struct sockaddr_in server_addr, client_addr; socklen_t client_len = sizeof(client_addr); char buffer[BUFFER_SIZE]; // 创建套接字 if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("Socket creation failed"); exit(EXIT_FAILURE); } // 设置套接字选项,允许地址重用 int opt = 1; if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) < 0) { perror("Setsockopt failed"); close(server_fd); exit(EXIT_FAILURE); } // 绑定套接字到指定端口 server_addr.sin_family = AF_INET; server_addr.sin_port = htons(PORT); server_addr.sin_addr.s_addr = INADDR_ANY; memset(&(server_addr.sin_zero), 0, 8); if (bind(server_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) { perror("Bind failed"); close(server_fd); exit(EXIT_FAILURE); } // 监听套接字 if (listen(server_fd, BACKLOG) < 0) { perror("Listen failed"); close(server_fd); exit(EXIT_FAILURE); } printf("Server is listening on port %d... ", PORT); // 接受客户端连接 while (1) { if ((client_fd = accept(server_fd, (struct sockaddr *)&client_addr, &client_len)) < 0) { perror("Accept failed"); continue; } printf("Connection accepted from %s:%d ", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port)); // 读取客户端发送的数据 int bytes_received = recv(client_fd, buffer, BUFFER_SIZE, 0); if (bytes_received < 0) { perror("Receive failed"); close(client_fd); continue; } buffer[bytes_received] = '