我应该将什么用作C ++中用于从网络套接字接收数据的缓冲区?

时间:2010-08-10 15:32:12

标签: c++ sockets raw-sockets buffer

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

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

string page;
while( len = recv( ... ) ) {
   page.append( buf, len );
}