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
しています(誰かが疑問に思っている場合に備えて)が、この問題の解決にも目的があると思います。
とにかく、私が尋ねている質問は、2番目のコメントに関するものです。htmlbff
recvからのデータを正しく保存するにはどうすればよいですか?