我在 C++ (Linux) 中使用套接字编写了两个简单的程序服务器和一个客户端。最初它是一个示例客户端-服务器应用程序(发送和接收响应的回显消息)。接下来,我更改了客户端以实现 HTTP GET(现在我不再使用我的示例服务器)。它可以工作,但无论我设置了什么缓冲区大小,客户端都只收到 1440 字节。我想将整个页面接收到缓冲区中。我认为这与 TCP 属性有关,我应该在客户端代码中实现某种循环来捕获答案的所有部分。但我不知道我到底应该做什么。
这是我的代码:
...
int bytesSent = send(sock, tmpCharArr, message.size()+1, 0);
// Wait for the answer. Receive it into the buffer defined.
int bytesRecieved = recv(sock, resultBuf, 2048*100, 0);
...
2048*100 是一个缓冲区大小,我认为这对于用于测试的相对较小的 WEB 页面来说已经足够了。但正如我提到的,我只收到 1440 个字节。
当服务器的响应大于 1440 字节时,我可以用 recv() 函数调用做什么来捕获所有回复“部分”?
提前致谢。
最佳答案
缓冲区大小由您无法控制的因素(路由器、ADSL 链接、IP 堆栈等)决定。传输大量数据的标准方法是重复调用 recv()
。