W C miałem działający kod, ale nie mam pojęcia, dlaczego to zadziałało, więc zacząłem go przepisywać, aby zrozumieć, co się dzieje.Jak przechowywać wyjście recv()?
Jak dotąd tak dobrze! Napisałem i jestem w 90% pewien, że rozumiem wszystko, co się teraz dzieje; Problem polega jednak na tym, że nie mam pojęcia, jak zapisać porcję danych odebranych przez recv
(databff
) do mojego wstępnie przydzielonego bufora (htmlbff
).
Rozważmy następujący kod (zauważ, że rozebrałem to trochę w dół, tak że zawiera tylko podstawowe informacje, np nie realokacji pamięci lub wyciek ochronę, itp ...):
#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 (jeśli Robię to dobrze, a rzeczy idą tak, jak sądzę, że są) c
to rozmiar aktualnej porcji danych, a q
to całkowita ilość danych otrzymanych do tej pory (q
jest zwiększana o c
za każdym razem, gdy pętla się powtarza). W tej chwili używam q
do obsługi pamięci (na wypadek, gdyby ktoś się zastanawiał), ale wierzę, że będzie to miało również cel w rozwiązaniu tego problemu.
W każdym razie pytanie, które zadaję, dotyczy drugiego komentarza. Jak poprawnie zapisać dane z recv na htmlbff
?
Naprawdę podoba mi się ta odpowiedź, dziękuję. Znalazłem ten najbardziej przydatny, ponieważ mogę teraz po prostu pominąć użycie bufora i napisać bezpośrednio do htmlbff. –