91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

C++中recvfrom函數如何使用

c++
小樊
122
2024-08-30 00:33:10
欄目: 編程語言

recvfrom() 是一個在 C++ 中用于從套接字(socket)接收數據的函數,該函數通常用于無連接的套接字類型,如 UDP

以下是 recvfrom() 函數的基本用法:

#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>

ssize_t recvfrom(int socket, void *buffer, size_t length, int flags, struct sockaddr *address, socklen_t *address_len);

參數說明:

  • socket: 已經創建并綁定的套接字文件描述符。
  • buffer: 指向用于接收數據的緩沖區的指針。
  • length: 接收緩沖區的大小。
  • flags: 接收操作的標志,通常為 0。
  • address: 指向存儲發送方地址信息的 sockaddr 結構體的指針。
  • address_len: 發送方地址結構體的大小,通常為 sizeof(sockaddr_in)(對于 IPv4)或 sizeof(sockaddr_in6)(對于 IPv6)。

返回值:

  • 成功時,返回接收到的字節數。
  • 失敗時,返回 -1,并設置 errno

以下是一個簡單的示例,展示了如何使用 recvfrom() 函數接收 UDP 數據:

#include<iostream>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <cstring>

int main() {
    int sockfd;
    struct sockaddr_in server_addr, client_addr;
    socklen_t client_addr_len = sizeof(client_addr);
    char buffer[1024];

    // 創建套接字
    sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    if (sockfd == -1) {
        std::cerr << "Error creating socket"<< std::endl;
        return 1;
    }

    // 配置服務器地址
    memset(&server_addr, 0, sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    server_addr.sin_port = htons(8080);

    // 綁定套接字
    if (bind(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) {
        std::cerr << "Error binding socket"<< std::endl;
        close(sockfd);
        return 1;
    }

    // 接收數據
    ssize_t received = recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr *)&client_addr, &client_addr_len);
    if (received == -1) {
        std::cerr << "Error receiving data"<< std::endl;
        close(sockfd);
        return 1;
    }

    // 輸出接收到的數據
    std::cout << "Received: "<< buffer<< std::endl;

    // 關閉套接字
    close(sockfd);

    return 0;
}

這個示例創建了一個 UDP 套接字,將其綁定到本地地址和端口 8080,然后使用 recvfrom() 函數接收數據。請注意,此示例僅接收一次數據,實際應用程序可能需要在循環中調用 recvfrom() 以持續接收數據。

0
渭南市| 资中县| 石家庄市| 顺昌县| 上虞市| 凉山| 淮阳县| 徐水县| 兴安县| 游戏| 荆门市| 习水县| 永济市| 嘉峪关市| 新巴尔虎左旗| 陆川县| 钟祥市| 湘阴县| 阳山县| 兴宁市| 宁武县| 清水河县| 渑池县| 赤峰市| 十堰市| 交口县| 香河县| 翁牛特旗| 铁力市| 阿巴嘎旗| 齐河县| 玉树县| 崇州市| 峡江县| 寻甸| 临邑县| 伊通| 绍兴县| 宣恩县| 东乡族自治县| 重庆市|