在C++中,`recv`函数是用于从套接字(socket)接收数据的。它是套接字编程中的一个基本函数,用于在网络通信中从远程计算机接收数据。
`recv`函数的原型如下:
```cpp
#include ssize_t recv(int sockfd, void *buf, size_t len, int flags); ``` 参数说明: * `sockfd`:套接字文件描述符,表示要接收数据的套接字。 * `buf`:指向接收数据的缓冲区的指针。 * `len`:缓冲区的大小,表示可以接收的最大数据量。 * `flags`:接收标志,用于控制接收操作的行为。例如,可以设置为`MSG_PEEK`来查看数据但不从接收队列中移除,或者设置为`MSG_WAITALL`来等待接收完整个请求的数据。 `recv`函数返回接收到的字节数,如果返回0,表示对方已经关闭了连接。如果返回-1,表示发生了错误,可以通过`errno`变量获取具体的错误原因。 下面是一个简单的示例,展示了如何使用`recv`函数从套接字接收数据: ```cpp #include #include #include #include #include int main() { int sockfd = socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in server_addr; server_addr.sin_family = AF_INET; server_addr.sin_port = htons(8080); inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr); connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)); char buffer[1024]; ssize_t recv_len = recv(sockfd, buffer, sizeof(buffer) - 1, 0); if (recv_len > 0) { buffer[recv_len] = '\0'; std::cout < "received="" message:=""><><> } else if (recv_len == 0) { std::cout < "connection="" closed="" by=""><> } else { std::cerr < "error="" occurred="" while="" receiving:=""><><> } close(sockfd); return 0; } ``` 注意:这个示例假设已经建立了一个TCP连接,并且服务器在端口8080上监听。在实际应用中,你需要根据实际情况调整代码。