c++ - 如何使用 C++ 使用 recv() 函数接收大数据?

标签 c++ sockets client httprequest http-get

我正在使用 c++ 编写控制台应用程序,它使用套接字并向服务器发送 HTTP GET 请求,但响应是一个大于 1000000 的 html 文件事实上我的buffer: char buffer[1000000]; 太小了。 我需要从服务器接收比缓冲区大小更大的数据。

我使用此代码,但如何才能收到更大的响应?我是这个编程领域的初学者,所以请帮助我编写代码和解释,谢谢:

char buffer[1000000];


    int nDataLength;
    while ((nDataLength = recv(Socket, buffer, 1000000, 0)) > 0) {
        int i = 0;

        while (buffer[i] >= 32 || buffer[i] == '\n' || buffer[i] == '\r') {
            myString += buffer[i];
            i += 1;
        }
    }

    cout << myString << "\n"; 

最佳答案

从套接字读取时需要使用较小的固定长度缓冲区,然后将接收到的数据附加到每个上的动态增长缓冲区(如 std::string,或文件)循环迭代。 recv() 告诉您实际收到了多少字节,访问缓冲区时不要访问超过该数量的字节。

char buffer[1024];
std::string myString;

int nDataLength;
while ((nDataLength = recv(Socket, buffer, sizeof(buffer), 0)) > 0) {
    myString.append(buffer, nDataLength);
}

std::cout << myString << "\n"; 

关于c++ - 如何使用 C++ 使用 recv() 函数接收大数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36386361/

相关文章:

c++ - 我对c++有关<stdio.h>库有问题吗?

c++ - C++ 中的退出功能不起作用

c++ - 如何同时处理一个 C++ 类的多个成员?

C++ 套接字 - 从结构数组返回单个地址信息

javascript - 在 JavaScript 中播放字符串中的音频文件

php - 用于 Linux 的 xdebug dbgp 客户端

php - Nodejs 和 PHP(客户端)

c++ - 用于在 log(N) 时间内查找连续项目的算法

c - 限制发送队列中udp数据包的数量

linux - Unix vs BSD vs TCP vs Internet 套接字?