In C hatte ich Arbeitscode, aber ich habe keine Ahnung, warum es funktionierte, also fing ich an, es neu zu schreiben, damit ich wirklich verstehen konnte, was vor sich ging.Wie speichert man die Ausgabe von recv()?
So weit so gut! Ich schrieb um und bin zu 90% sicher, dass ich alles verstehe, was gerade passiert; Das Problem ist jedoch, dass ich keine Ahnung habe, wie ich den Datenblock, der von recv
(databff
) empfangen wurde, in meinen vorbelegten Puffer (htmlbff
) speichern kann.
Betrachten Sie den folgenden Code (beachten Sie, dass ich das ziemlich viel abgespeckte, so dass er nur die Grundlagen enthält, zB kein Gedächtnis Neuzuteilung oder Schutz auslaufen, etc ...):
#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;
}
So (wenn Ich mache das richtig, und die Dinge gehen so, wie ich denke, dass sie sind) c
ist die Größe des aktuellen Datenblocks, und q
ist die Gesamtmenge der bisher empfangenen Daten (q
wird um c
jedes Mal inkrementiert die Schleife wiederholt). Im Moment verwende ich q
für die Speicherbehandlung (falls jemand sich wundern würde), aber ich glaube, dass es auch einen Sinn in der Lösung dieses Problems haben wird.
Auf jeden Fall ist die Frage, die ich stelle, in Bezug auf den zweiten Kommentar. Wie speichere ich die Daten von recv in htmlbff
korrekt?
Ich mag diese Antwort wirklich danke. Ich fand das am nützlichsten, da ich jetzt einfach den Puffer überspringen und direkt in htmlbff schreiben kann. –