Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[WinSock] Serwer otrzymuje tylko część danych

Ostatnio zmodyfikowano 2013-03-28 16:40
Autor Wiadomość
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:
C/C++
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 ); } // zamienia char na konkretny kod do mojego switcha
    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ć
P-79506
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...
P-79514
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
P-79548
« 1 »
  Strona 1 z 1