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

溫馨提示×

利用C++ recv函數實現數據包的完整接收

c++
小樊
100
2024-08-19 21:06:35
欄目: 編程語言

在C++中使用recv函數接收數據包時,需要注意數據包可能會被分成多個部分發送,因此需要對數據進行緩存和拼接,直到接收到完整的數據包為止。以下是一個示例代碼,實現數據包的完整接收:

#include <iostream>
#include <cstring>
#include <sys/types.h>
#include <sys/socket.h>

#define BUFFER_SIZE 1024

int main() {
    int server_fd, new_socket;
    struct sockaddr_in address;
    int addrlen = sizeof(address);
    char buffer[BUFFER_SIZE] = {0};

    // 創建socket
    if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
        perror("socket failed");
        return -1;
    }

    // 綁定地址和端口
    address.sin_family = AF_INET;
    address.sin_addr.s_addr = INADDR_ANY;
    address.sin_port = htons(8888);
    if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {
        perror("bind failed");
        return -1;
    }

    // 監聽連接
    if (listen(server_fd, 3) < 0) {
        perror("listen failed");
        return -1;
    }

    // 接受連接
    if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen)) < 0) {
        perror("accept failed");
        return -1;
    }

    // 接收數據包
    std::string data;
    int bytes_received;
    do {
        bytes_received = recv(new_socket, buffer, BUFFER_SIZE, 0);
        if (bytes_received < 0) {
            perror("recv failed");
            return -1;
        }
        data.append(buffer, bytes_received);
    } while (bytes_received > 0);

    // 處理接收到的完整數據包
    std::cout << "Received data: " << data << std::endl;

    return 0;
}

在上面的代碼中,創建了一個服務器并監聽連接,接收到新的連接后,使用recv函數接收數據包,直到接收到的字節數為0為止。接收到的數據會不斷追加到一個字符串變量中,直到接收到完整的數據包。最后輸出完整的接收到的數據包。

0
太仓市| 邮箱| 延长县| 城步| 平阳县| 霍邱县| 栾城县| 锡林浩特市| 肃南| 九龙坡区| 涪陵区| 锡林郭勒盟| 临夏市| 许昌县| 兰州市| 三门峡市| 阿勒泰市| 永泰县| 老河口市| 泾川县| 吴忠市| 唐海县| 独山县| 聂拉木县| 峨眉山市| 乐都县| 安康市| 高台县| 中江县| 沾益县| 丁青县| 荆州市| 佳木斯市| 克什克腾旗| 虹口区| 巴林左旗| 台中县| 当涂县| 高清| 武宁县| 收藏|