溫馨提示×

c++中recv函數(shù)的作用是什么

c++
小億
87
2024-06-07 17:53:37
欄目: 編程語言

在C++中,`recv`函數(shù)是用于從套接字(socket)接收數(shù)據(jù)的。它是套接字編程中的一個基本函數(shù),用于在網(wǎng)絡(luò)通信中從遠程計算機接收數(shù)據(jù)。

`recv`函數(shù)的原型如下:

```cpp

#include

ssize_t recv(int sockfd, void *buf, size_t len, int flags);

```

參數(shù)說明:

* `sockfd`:套接字文件描述符,表示要接收數(shù)據(jù)的套接字。

* `buf`:指向接收數(shù)據(jù)的緩沖區(qū)的指針。

* `len`:緩沖區(qū)的大小,表示可以接收的最大數(shù)據(jù)量。

* `flags`:接收標志,用于控制接收操作的行為。例如,可以設(shè)置為`MSG_PEEK`來查看數(shù)據(jù)但不從接收隊列中移除,或者設(shè)置為`MSG_WAITALL`來等待接收完整個請求的數(shù)據(jù)。

`recv`函數(shù)返回接收到的字節(jié)數(shù),如果返回0,表示對方已經(jīng)關(guān)閉了連接。如果返回-1,表示發(fā)生了錯誤,可以通過`errno`變量獲取具體的錯誤原因。

下面是一個簡單的示例,展示了如何使用`recv`函數(shù)從套接字接收數(shù)據(jù):

```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: "<< buffer<< std::endl;

} else if (recv_len == 0) {

std::cout << "Connection closed by peer"<< std::endl;

} else {

std::cerr << "Error occurred while receiving: "<< strerror(errno)<< std::endl;

}

close(sockfd);

return 0;

}

```

注意:這個示例假設(shè)已經(jīng)建立了一個TCP連接,并且服務(wù)器在端口8080上監(jiān)聽。在實際應(yīng)用中,你需要根據(jù)實際情況調(diào)整代碼。

0