C语言智能家居系统服务器模块代码示例 - 基础实现
#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <sys/socket.h>\n#include <arpa/inet.h>\n#include <unistd.h>\n\n#define MAX_CLIENTS 10\n#define BUFFER_SIZE 1024\n\nint main(int argc, char *argv[]) {\n int server_socket, client_sockets[MAX_CLIENTS];\n struct sockaddr_in server_addr, client_addr;\n char buffer[BUFFER_SIZE];\n\n // 创建服务器套接字\n server_socket = socket(AF_INET, SOCK_STREAM, 0);\n if (server_socket == -1) {\n perror("Failed to create socket");\n exit(EXIT_FAILURE);\n }\n\n // 设置服务器地址\n server_addr.sin_family = AF_INET;\n server_addr.sin_addr.s_addr = INADDR_ANY;\n server_addr.sin_port = htons(8080);\n\n // 绑定服务器套接字到指定地址和端口\n if (bind(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {\n perror("Failed to bind socket");\n exit(EXIT_FAILURE);\n }\n\n // 监听客户端连接请求\n if (listen(server_socket, MAX_CLIENTS) < 0) {\n perror("Failed to listen for connections");\n exit(EXIT_FAILURE);\n }\n\n printf("Server started. Waiting for connections... ");\n\n while (1) {\n socklen_t client_len = sizeof(client_addr);\n\n // 接受客户端连接请求\n int client_socket = accept(server_socket, (struct sockaddr *)&client_addr, &client_len);\n if (client_socket < 0) {\n perror("Failed to accept client connection");\n exit(EXIT_FAILURE);\n }\n\n printf("Client connected: %s:%d\n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port));\n\n // 将客户端套接字加入到客户端套接字列表\n int i;\n for (i = 0; i < MAX_CLIENTS; i++) {\n if (client_sockets[i] == 0) {\n client_sockets[i] = client_socket;\n break;\n }\n }\n\n // 读取客户端发送的数据\n memset(buffer, 0, sizeof(buffer));\n int bytes_read = read(client_socket, buffer, sizeof(buffer));\n if (bytes_read < 0) {\n perror("Failed to read data from client");\n exit(EXIT_FAILURE);\n }\n\n printf("Received data from client: %s\n", buffer);\n\n // 向客户端发送响应数据\n char response[] = "Hello from server!";\n if (write(client_socket, response, strlen(response)) < 0) {\n perror("Failed to send response to client");\n exit(EXIT_FAILURE);\n }\n\n // 关闭客户端套接字\n close(client_socket);\n }\n\n // 关闭服务器套接字\n close(server_socket);\n\n return 0;\n}
原文地址: https://www.cveoy.top/t/topic/qksp 著作权归作者所有。请勿转载和采集!