2

我正在使用带有 C++ 的套接字。该程序只是请求一个 HTTP 页面,将其读入一个缓冲区buf[512],然后显示该缓冲区。然而,页面可以包含比缓冲区更多的数据,因此如果没有剩余空间,它将被切断。我可以使缓冲区大小更大,但这似乎不是一个好的解决方案。这是我正在使用的代码:

char buf[512];
int byte_count = recv(sockfd, buf, sizeof(buf), 0);

在 C++ 中用作缓冲区的 char 数组的替代方法是什么?

4

2 回答 2

2

取决于您打算如何处理数据。如果您只想将其转储到输出流,那么正确的做法是做您正在做的事情,但是在循环中执行,直到没有更多数据要读取,然后将缓冲区写入输出流读。

于 2010-08-10T15:37:11.813 回答
1

基本上没有一个 - 使用 recv 时,您需要反复调用它,直到它读取了您的所有输入。您当然可以使用支持不断增长的缓冲区的更高级的套接字库,但是对于普通的旧 recv(),您需要一个 char 数组(或 char 向量)。

您当然可以将读取的数据附加到动态缓冲区中,例如字符串:

string page;
while( len = recv( ... ) ) {
   page.append( buf, len );
}
于 2010-08-10T15:34:02.203 回答