In C avevo codice funzionante ma non avevo idea del perché funzionasse, quindi ho iniziato a riscriverlo in modo da poter effettivamente capire cosa sta succedendo.Come memorizzare l'output di recv()?
Fin qui tutto bene! Ho riscritto e sono sicuro al 90% che capisco tutto ciò che sta accadendo ora; il problema, tuttavia, è che non ho idea di come archiviare il blocco dati ricevuto da recv
(databff
) nel buffer pre-allocato (htmlbff
).
Si consideri il seguente codice (si noti che ho messo a nudo questo giù un bel po ', in modo che include solo le nozioni di base, ad esempio, non ha memoria riallocazione o perdite di protezione, ecc ...):
#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;
}
Quindi (se Sto facendo tutto bene, e le cose stanno andando come penso che siano) c
è la dimensione del frammento di dati corrente e q
è la quantità totale di dati ricevuti finora (q
viene incrementata di c
ogni volta che il ciclo si ripete). Al momento sto usando q
per la gestione della memoria (nel caso qualcuno si stia chiedendo) ma credo che avrà anche scopo nella soluzione a questo problema.
In ogni caso, la domanda che sto ponendo riguarda il secondo commento. Come posso archiviare correttamente i dati da recv in htmlbff
?
Mi piace molto questa risposta grazie. Ho trovato questo più utile perché ora posso semplicemente saltare usando il buffer e scrivere direttamente in htmlbff. –