上一篇
如何通过C语言实现网络开发中的实例应用?
- 行业动态
- 2025-01-21
- 2802
以下是一个C语言网络开发的简单实例:使用socket编程实现客户端和服务器之间的基本通信。服务器端监听端口,客户端连接后可发送消息给服务器,服务器接收并回应,展示基础的网络数据传输流程。
服务器端代码
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #define PORT 8888 #define MAX_BUFFER_SIZE 1024 int main() { int server_fd, new_fd; struct sockaddr_in server_addr, client_addr; socklen_t client_addr_len = sizeof(client_addr); char buffer[MAX_BUFFER_SIZE]; // 创建套接字 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(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)) == -1) { perror("bind"); close(server_fd); exit(1); } // 监听端口 if (listen(server_fd, 10) == -1) { perror("listen"); close(server_fd); exit(1); } printf("Server is listening on port %d... ", PORT); // 接受客户端连接请求 while (1) { if ((new_fd = accept(server_fd, (struct sockaddr *)&client_addr, &client_addr_len)) == -1) { perror("accept"); continue; } printf("Server got connection from %s ", inet_ntoa(client_addr.sin_addr)); // 接收客户端发送的数据 memset(buffer, 0, MAX_BUFFER_SIZE); if (recv(new_fd, buffer, MAX_BUFFER_SIZE, 0) == -1) { perror("recv"); close(new_fd); continue; } printf("Received message from client: %s ", buffer); // 向客户端发送欢迎信息 const char *welcome_msg = "Welcome to the server!"; send(new_fd, welcome_msg, strlen(welcome_msg), 0); // 关闭与客户端的连接 close(new_fd); } // 关闭服务器套接字 close(server_fd); return 0; }
客户端代码
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #define SERVER_IP "127.0.0.1" #define PORT 8888 #define MAX_BUFFER_SIZE 1024 int main() { int sock; struct sockaddr_in server_addr; char buffer[MAX_BUFFER_SIZE]; const char *message = "Hello, Server!"; // 创建套接字 if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket"); exit(1); } // 初始化服务器地址结构体 server_addr.sin_family = AF_INET; server_addr.sin_port = htons(PORT); server_addr.sin_addr.s_addr = inet_addr(SERVER_IP); memset(&(server_addr.sin_zero), 0, 8); // 连接到服务器 if (connect(sock, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) { perror("connect"); close(sock); exit(1); } // 向服务器发送数据 send(sock, message, strlen(message), 0); printf("Message sent to the server: %s ", message); // 接收服务器发送的欢迎信息 memset(buffer, 0, MAX_BUFFER_SIZE); if (recv(sock, buffer, MAX_BUFFER_SIZE, 0) == -1) { perror("recv"); close(sock); exit(1); } printf("Received message from server: %s ", buffer); // 关闭套接字 close(sock); return 0; }
运行步骤及结果分析
运行步骤:首先编译并运行服务器端代码,使其在指定端口上监听客户端的连接请求,然后编译并运行客户端代码,客户端将尝试连接到服务器,并发送一条消息给服务器,服务器接收到客户端的消息后,会回复一条欢迎信息给客户端,客户端接收到服务器的回复后,将其打印出来,双方关闭各自的套接字连接。
结果分析:通过这个简单的示例,可以看到C语言中基于TCP协议的网络编程的基本流程,包括套接字的创建、绑定、监听、接受连接、发送和接收数据以及关闭套接字等操作,在实际应用中,可以根据具体的需求对程序进行扩展和优化,例如添加多线程或多进程处理并发连接,提高程序的性能和可靠性。
本站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本站,有问题联系侵删!
本文链接:http://www.xixizhuji.com/fuzhu/399498.html