在 CI 中有工作代码,但不知道它为什么工作,所以我开始重写它,这样我才能真正理解发生了什么。
到目前为止,一切都很好!我重写了,并且 90% 确定我理解现在发生的一切;然而,问题是我不知道如何将recv
( databff
) 接收到的数据块存储到我预先分配的缓冲区 ( htmlbff
) 中。
考虑下面的代码(请注意,我把它剥离了很多,所以它只包括基础知识,例如没有内存重新分配或泄漏保护等......):
#define BUFFERSIZE 4096
#define MAXDATASIZE 256
char *htmlbff, databff[MAXDATASIZE];
int c, i = BUFFERSIZE, q = 0;
if(!(htmlbff = malloc(i)))
{
printf("\nError! Memory allocation failed!");
return 0x00;
}
while((c = recv(sock, databff, MAXDATASIZE, 0)) > 0)
{
/*memory checks stripped out since they are irrelevent for this post*/
/*store data to the appropriate area in htmlbff*/
q += c;
}
所以(如果我做得对,并且事情按照我的想法进行)c
是当前数据块的大小,并且q
是到目前为止接收到的数据总量(每次循环重复时q
递增)。c
目前我正在使用q
内存处理(以防有人想知道),但我相信它在解决这个问题时也有目的。
无论如何,我要问的问题是关于第二条评论的。如何htmlbff
正确存储 recv 中的数据?