gpt4 book ai didi

c++ - 使用 C++ Socket 只接收必要的数据

转载 作者:行者123 更新时间:2023-11-30 02:57:38 24 4
gpt4 key购买 nike

我只是想获取带有页眉的页面内容...但似乎我的 1024 大小的缓冲区对于通过的最后一个信息包而言不是太大就是太小...我不知道如果有意义的话,不想得到太多或太少。这是我的代码。它打印出包含所有信息的页面,但我想确保它是正确的。

//Build HTTP Get Request
std::stringstream ss;
ss << "GET " << url << " HTTP/1.0\r\nHost: " << strHostName << "\r\n\r\n";
std::string req = ss.str();

// Send Request
send(hSocket, req.c_str(), strlen(req.c_str()), 0);

// Read from socket into buffer.
do
{
nReadAmount = read(hSocket, pBuffer, sizeof pBuffer);
printf("%s", pBuffer);

}
while(nReadAmount != 0);

最佳答案

 nReadAmount = read(hSocket, pBuffer, sizeof pBuffer);
printf("%s", pBuffer);

这个坏了。您只能对 C 样式(零终止)字符串使用 %s 格式说明符。 printf 应该如何知道要打印多少字节?该信息在 nReadAmount 中,但您不使用它。

此外,即使 read 失败,您也会调用 printf

最简单的修复:

 do
{
nReadAmount = read(hSocket, pBuffer, (sizeof pBuffer) - 1);
if (nReadAmount <= 0)
break;
pBuffer[nReadAmount] = 0;
printf("%s", pBuffer);
} while(1);

关于c++ - 使用 C++ Socket 只接收必要的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14421008/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com