阅读量:0
recvmsg函数是Linux系统中用于接收套接字数据的函数,在网络编程中经常会用到。下面是一个简单的实际应用案例:
假设有一个服务器程序,监听某个端口,客户端连接后会发送数据给服务器。服务器程序需要接收客户端发送的数据,并进行处理。
以下是一个简单的使用recvmsg函数接收客户端数据的示例代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #define PORT 8888 #define BUF_SIZE 1024 int main() { int server_fd, client_fd; struct sockaddr_in server_addr, client_addr; socklen_t addr_len = sizeof(client_addr); char buffer[BUF_SIZE]; // 创建套接字 server_fd = socket(AF_INET, SOCK_STREAM, 0); if (server_fd == -1) { perror("socket"); exit(EXIT_FAILURE); } // 绑定地址 server_addr.sin_family = AF_INET; server_addr.sin_port = htons(PORT); server_addr.sin_addr.s_addr = INADDR_ANY; if (bind(server_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) == -1) { perror("bind"); exit(EXIT_FAILURE); } // 监听端口 if (listen(server_fd, 5) == -1) { perror("listen"); exit(EXIT_FAILURE); } // 接受连接 client_fd = accept(server_fd, (struct sockaddr*)&client_addr, &addr_len); if (client_fd == -1) { perror("accept"); exit(EXIT_FAILURE); } // 接收数据 ssize_t num_bytes = recv(client_fd, buffer, BUF_SIZE, 0); if (num_bytes == -1) { perror("recv"); exit(EXIT_FAILURE); } // 打印接收到的数据 printf("Received data: %s\n", buffer); // 关闭套接字 close(client_fd); close(server_fd); return 0; }
上面的代码示例中,服务器程序通过recv函数接收客户端发送的数据,并打印出来。在实际应用中,可以根据接收到的数据进行相应的处理,比如解析数据内容、回复客户端等操作。