req.type=0x02;
glowa.type = GG_USERLIST_REQUEST;
glowa.length = sizeof(req);
send(gniazdo, (char*)&glowa, sizeof(glowa),0);
send(gniazdo, (char*)&req, sizeof(req),0);
recv(gniazdo, (char*)&glowa, sizeof(glowa), 0);
if(glowa.type == GG_USERLIST_REPLY)
{
while(loop<glowa.length)
{
recv(gniazdo, (char*)&rep, glowa.length, 0);
zapisz(rep.request);
loop=loop+strlen(rep.request);
}
}
sposób który opisałem na górze nie działa bo serwer zwraca glowa.length=4077 podczas gdy długość listy to ponad 7000. A więc pętla kończy sie zbyt wcześnie
rep.type jest zwraca poprawną wartość tylko za pierwszym razem (GG_USERLIST_GET_MORE_REPLY) potem to już są dziwne wartości typu 52,56,104.
A więc pętli nie moge zakończyć gdy dostane GG_USERLIST_GET_REPLY.
Co ciekawe mimo tego że przekroczyłem 4077 znaków serwer dalej wysyła liste. więc teoretycznie mogę ją pograć całą ale jedynie wtedy gdy ustawie pętle na określoną ilość iteracji (a przecież nie o to chodzi)
Moje pytanie jest takie:
Dlaczego rep.type zwraca mi złe wartości? czy powinienem po każdym odebraniu wysylać jakiś pakiet do serwera?
z góry dzięki za pomoc