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

标签 c++ sockets

我只是想获取带有标题的页面内容...但是对于最后一个通过的信息包来说,大小为 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/

相关文章:

c++ - boost phoenix::bind 编译时出错

C++:实现定义的可接受的物理源文件字符

facebook - 通过 Nodejs 的 TLS Socket 连接

python - 如何在python中终止正在运行的线程?

node.js - 套接字进程未关闭套接字文件

c++ - 线程(C++ 中的并行计算)是否与优化级别 (gcc) 不兼容?

c++ - PfCreateInterface 返回错误 120(未实现)

c++ - 嵌套可移动对象的 std::containers

java - Java上的Socket连接,指定IP

c - C (Linux) 套接字服务器客户端编程中有关accept() 的问题