如何使用 C++ 使用 recv() 函数接收大数据?
How to receive big data with recv() function using c++?
我正在使用 c++ 编写控制台应用程序,它使用套接字并向服务器发送 HTTP GET 请求,但响应是 html 文件大于 1000000 实际上我的缓冲区: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";
recv return 值是接收数据的总大小。
所以您可以知道总数据大小,如果您的缓冲区小于总数据大小,则有 2 个解决方案。我猜...
1. 在堆上分配缓冲区。使用像新的,allcoc 等。
2. 将接收到的数据存储到数据结构(如循环队列、队列),同时总数据大小为零(recv 函数return)
我更喜欢使用第二种解决方案。
谷歌搜索 recv 函数,套接字编程示例代码。
会有帮助。
从套接字读取时需要使用较小的固定长度缓冲区,然后在每次循环迭代时将接收到的数据附加到动态增长的缓冲区(如 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++ 编写控制台应用程序,它使用套接字并向服务器发送 HTTP GET 请求,但响应是 html 文件大于 1000000 实际上我的缓冲区: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";
recv return 值是接收数据的总大小。 所以您可以知道总数据大小,如果您的缓冲区小于总数据大小,则有 2 个解决方案。我猜... 1. 在堆上分配缓冲区。使用像新的,allcoc 等。 2. 将接收到的数据存储到数据结构(如循环队列、队列),同时总数据大小为零(recv 函数return)
我更喜欢使用第二种解决方案。 谷歌搜索 recv 函数,套接字编程示例代码。 会有帮助。
从套接字读取时需要使用较小的固定长度缓冲区,然后在每次循环迭代时将接收到的数据附加到动态增长的缓冲区(如 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";