[WinSock] Serwer otrzymuje tylko część danych
Ostatnio zmodyfikowano 2013-03-28 16:40
lergon Temat założony przez niniejszego użytkownika |
[WinSock] Serwer otrzymuje tylko część danych » 2013-03-27 22:24:24 Witam Chciałem stworzyć prosty system logowania korzystając z Biblioteki Winsock niby wszystko działa jednak gdy wysyłam do serwera pierw login następnie wysyłam hasło i chce aby serwer wyświetlił mi to co otrzymał okazuje się że dostał tylko Login. Raz tylko udało mi się spowodować tak aby otrzymał login i hasło ale w tedy z hasłem był ciekawy błąd a mianowicie że przy haśle o długości 5 znaków otrzymywał tylko 3 ostatnie ale gdy hasło miało juz 8 znaków otrzymywał je poprawnie. Niestety chcąc naprawić jakoś ten błąd utraciłem ten częściowo działający kod Kod Serwera: std::cout << "Client connected.\n"; Socket_1 = Akcept; while( Wlacznik != OFF ) { Obsluga_Komunikatu = 0; BytesRecive_Send = recv( Socket_1, Obsluga_Klienta, 3, 0 ); for( int licznik = 0; licznik < strlen( Obsluga_Klienta ); licznik++ ) { Obsluga_Komunikatu = Obsluga_Komunikatu * 10 +(( int ) Obsluga_Klienta[ licznik ] - 48 ); } switch( Obsluga_Komunikatu ) { case 666: { Wlacznik = OFF; } break; case 2: { char Login[ 16 ]; char Haslo[ 16 ]; int otrzym = recv( Socket_1, Login, 15, 0 ); otrzym = recv( Socket_1, Haslo, 15, 0 ); std::cout << "\n Login: " << Login << "\n Haslo: " << Haslo; } break; } }
kod klienta:
case WM_COMMAND: switch( wParam ) { case Id_Zaloguj: { char Login[ 16 ]; char Haslo[ 16 ]; char Wiadomosc = '2'; int wys = send( Socket_1, & Wiadomosc, 1, 0 ); GetWindowText( Logowanie_Login, Login, 15 ); GetWindowText( Logowanie_Haslo, Haslo, 15 ); wys = 0; wys = send( Socket_1, Login, 16, 0 ); wys = send( Socket_1, Haslo, 16, 0 ); } break; } break;
Byłbym bardzo wdzięczny jeżeli powiedzieli byście mi gdzie mam błąd ewentualnie jak go nazwać abym mógł go wy-googlować |
|
hincu |
» 2013-03-28 09:20:11 pierwsze co mi sie rzucilo w oczy to rozmiar tablicy, wysylanie i odbieranie tablice indeksujemy od 0 ( char cos[16] ma 17 indeksow ) wysylasz 16 bajtowy pakiet x2 ( a tablice maja po 17 ) odbierasz 15 bajtowy pakiet x2 ( znow tablice )
jesli login i haslo jest mniejszy od rozmiarow tablicy to wstaw tam jakies znaki, ktore beda ignorowane ( moze to juz zrobiles, nie wiem nie widze kodu )
nie dziw sie ze nie hula skoro odbiera zle dane... |
|
lergon Temat założony przez niniejszego użytkownika |
» 2013-03-28 16:40:51 Hahaha tydzień myślenia :D a wystarczyło zmienić dwie wartości w serwerze. Dzięki Wielkie |
|
« 1 » |