我正在使用带有C ++的套接字。程序只需要一个HTTP页面,将其读入缓冲区buf[512]
,然后显示缓冲区。但是,页面可以包含比缓冲区更多的数据,因此如果没有剩余空间,它将被切断。我可以使缓冲区大小更大,但这似乎不是一个好的解决方案。这是我正在使用的代码:
char buf[512];
int byte_count = recv(sockfd, buf, sizeof(buf), 0);
C ++中用作缓冲区的char数组的替代方法是什么?
答案 0 :(得分:2)
取决于您打算如何处理数据。如果你只想将它转储到输出流,那么正确的做法是做你正在做的事情,但是在循环中做它,直到没有更多的数据要读取,在每次读取后将缓冲区写入输出流读取。
答案 1 :(得分:1)
基本上没有一个 - 当使用recv时,你需要反复调用它,直到它读完所有的输入。您当然可以使用支持增长缓冲区的更高级的套接字库,但对于普通的旧的recv(),您需要一个char数组(或char的向量)。
您当然可以将读取的数据附加到动态缓冲区中,例如字符串:
string page;
while( len = recv( ... ) ) {
page.append( buf, len );
}