[solved] Winsock recv() pobiera tylko 34000bajty

0

Witam mam taki problem
Pobierając strone internetową:

	char tmp[1000000];      
	recv(gniazdo,tmp,1000000,0);

Otrzymuje wynik tylko 34000 bajtowy i ani bajta wiecej... :/

To niżej może być mylące bo znalazłem to w jakimś programie a nie w winsock2.h

Znalazłem na googlach też takie coś:

#define SEND_SOCK_BUFFER_SIZE 34000
#define RECV_SOCK_BUFFER_SIZE  34000
#define SERVER_RECV_SOCK_BUFFER_SIZE  34000
#define SERVER_SEND_SOCK_BUFFER_SIZE 34000

ale nawet trudno mi określić w jakim pliku to może być.

Dlaczego jeśli w deklaracji mojego maina wrzuce:

#define RECV_SOCK_BUFFER_SIZE  100000

To nadal pobiera mi tylko 34000 bajtów

:-|

//Edit
A to dziwne bo typ poleceniem mam zamiar pobrać strone internetową, a onet.pl mi pobrało bez problemu a ma ponad 70 000 znaków, wp.pl zacieło się znacznie wczesniej niż 34000...

0

Otrzymuje wynik tylko 34000 bajtowy i ani bajta wiecej... :/

Bo trzeba czytać dokumentację. Jakbyś przeczytał, to wiedziałbyś, że recv nie musi odebrać naraz żądaną/oczekiwaną liczbę bajtów - może to zrobić na raty.

0

Czyli na przykład zrobić tak?

recv(gniazdo,tmp,1000000,0)
recv(gniazdo,tmp2,1000000,0)

Nawet jeśli to dlaczego pobierając strone onetu ważącą znacznie mniej niż 34'000 znaków mi bez problemów wczytało do zmiennej..?

0

Nawet jeśli to dlaczego pobierając strone onetu ważącą znacznie mniej niż 34'000 znaków mi bez problemów wczytało do zmiennej..?

Bo to był onet, a nie jakaś inna strona.

Czyli na przykład zrobić tak? [...]

Zrobić możesz, ale to zasadniczo problemu nie rozwiąże. Wywołuj recv w pętli, dopisując dane do bufora, aż odczytasz oczekiwaną ilość bajtów.

0

Działa!
Dziękuję za odpowiedz

Pozdrawiam :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1