C语言网络编程实践(TCP套接字编程实例)
C语言网络编程实践涉及到使用C语言以及相关库来实现网络通信。
下面是一个简单的TCP套接字编程实例,展示了一个简单的客户端-服务器模型:
服务器端(server.c):
#include #include #include #include #include #include #include int main() { int server_fd, client_fd, addr_len; struct sockaddr_in server_addr, client_addr; char buffer[1024]; // 创建套接字 if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket"); exit(1); } // 配置服务器地址 server_addr.sin_family = AF_INET; server_addr.sin_port = htons(8080); server_addr.sin_addr.s_addr = INADDR_ANY; memset(&(server_addr.sin_zero), '', 8); // 绑定地址到套接字 if (bind(server_fd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1) { perror("bind"); exit(1); } // 监听客户端连接 if (listen(server_fd, 10) == -1) { perror("listen"); exit(1); } printf("Server is listening on port 8080...n"); addr_len = sizeof(struct sockaddr_in); // 接受客户端连接 if ((client_fd = accept(server_fd, (struct sockaddr *)&client_addr, &addr_len)) == -1) { perror("accept"); exit(1); } printf("Server received a connection from %sn", inet_ntoa(client_addr.sin_addr)); // 接收客户端消息 recv(client_fd, buffer, sizeof(buffer), 0); printf("Client said: %sn", buffer); // 向客户端发送消息 send(client_fd, "Hello, Client!", 15, 0); // 关闭套接字 close(client_fd); close(server_fd); return 0; }
客户端(client.c):
#include #include #include #include #include #include #include int main() { int client_fd; struct sockaddr_in server_addr; char buffer[1024]; // 创建套接字 if ((client_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket"); exit(1); } // 配置服务器地址 server_addr.sin_family = AF_INET; server_addr.sin_port = htons(8080); server_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); memset(&(server_addr.sin_zero), '', 8); // 连接到服务器 if (connect(client_fd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1) { perror("connect"); exit(1); } // 向服务器发送消息 send(client_fd, "Hello, Server!", 15, 0); // 接收服务器回复 recv(client_fd, buffer, sizeof(buffer), 0);