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

溫馨提示×

C++ recvfrom函數在多線程環境中的應用

c++
小樊
84
2024-08-30 00:37:50
欄目: 編程語言

recvfrom() 是一個用于接收來自指定套接字上的數據報的函數,通常用于無連接的UDP協議

以下是一個簡單的示例,展示了如何在多線程環境中使用 recvfrom() 函數:

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

const int BUFFER_SIZE = 1024;
const int PORT = 8080;

void receive_data(int sockfd) {
    char buffer[BUFFER_SIZE];
    struct sockaddr_in client_addr;
    socklen_t client_addr_size = sizeof(client_addr);

    while (true) {
        ssize_t received = recvfrom(sockfd, buffer, BUFFER_SIZE, 0, (struct sockaddr *)&client_addr, &client_addr_size);
        if (received > 0) {
            std::cout << "Received message from client: " << inet_ntoa(client_addr.sin_addr) << ":" << ntohs(client_addr.sin_port)<< std::endl;
            std::cout << "Message: "<< buffer<< std::endl;
        } else {
            std::cerr << "Error receiving data"<< std::endl;
            break;
        }
    }
}

int main() {
    int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    if (sockfd == -1) {
        std::cerr << "Error creating socket"<< std::endl;
        return 1;
    }

    struct sockaddr_in server_addr;
    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(PORT);

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

    // 創建一個線程來處理接收到的數據報
    std::thread receiver_thread(receive_data, sockfd);

    // 主線程可以執行其他任務,例如發送數據報或等待用戶輸入
    // ...

    // 等待接收線程完成
    receiver_thread.join();

    close(sockfd);
    return 0;
}

這個示例中,我們創建了一個線程來處理接收到的數據報。主線程可以執行其他任務,例如發送數據報或等待用戶輸入。當主線程完成其任務時,它會等待接收線程完成,然后關閉套接字并退出程序。

請注意,這個示例僅用于演示目的,實際應用中可能需要根據需求進行更復雜的錯誤處理和資源管理。

0
广州市| 太仆寺旗| 开江县| 贡觉县| 嘉义市| 永川市| 邵东县| 深水埗区| 松溪县| 华亭县| 黎川县| 门头沟区| 乃东县| 武清区| 河间市| 湘阴县| 同心县| 保德县| 枞阳县| 汝南县| 西平县| 舞阳县| 清新县| 辰溪县| 云南省| 恩平市| 祁东县| 富裕县| 娱乐| 永昌县| 卢龙县| 贡嘎县| 莆田市| 清水河县| 西乡县| 咸丰县| 平陆县| 临城县| 梅州市| 乌审旗| 进贤县|