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

[C++, Winsock] Problem z przesyłaniem i odbieraniem danych

Ostatnio zmodyfikowano 2011-12-26 21:12
Autor Wiadomość
SeaMonster131
Temat założony przez niniejszego użytkownika
[C++, Winsock] Problem z przesyłaniem i odbieraniem danych
» 2011-12-26 19:29:32
Witam,
próbują swoich sił w sieci, a po to, żeby w końcu zrobić multi w grze ;)
No i mam taki problem, w kliencie wysyłam dane do serwera, odbieram je w osobnym wątku:
C/C++
if( al_key_down( & klaw, ALLEGRO_KEY_RIGHT ) ) //nacisniecie strzalki
{
    sendbuf = "####Strzalka w prawo";
    iResult = send( ConnectSocket, sendbuf, 20, 0 );
}


_beginthread( OdbierzWiad, 0, 0 );

//...

void OdbierzWiad( void * param )
{
    iResult = recv( ConnectSocket, recvbuf, 20, 0 );
    cout << "\nOtrzymane: " << recvbuf;
}

Tak apropo, musiałem dać na sztywno wysyłanie 20 bitów (chyba że się mylę, więc bajtów) danych i dorobić na początku 4 '#' ponieważ gdy używałem strlen(), to serwer odbierał jeden znak za dużo, gdy dałem strlen()-1 to odbierał jeden znak za mało.. :)
No dobra, a tutaj serwer:

C/C++
iResult = recv( ClientSocket, recvbuf, 20, 0 );
if( iResult > 0 ) //klient wyslal jakies dane
{
    cout << "\nOtrzymane: " << recvbuf;
   
    if( recvbuf == "####Strzalka w prawo" ) //if zwraca falsz :(
    {
        char * sendb = "#Ok, idziesz w prawo";
        iSendResult = send( ClientSocket, sendb, 20, 0 );
        if( iSendResult == SOCKET_ERROR )
        {
            cout << "\n#ERROR - send failed: " << WSAGetLastError();
            closesocket( ClientSocket );
            WSACleanup();
            return 1;
        }
       
        cout << "\nWYSLANE: " << sendb;
    }
}

If zwraca fałsz i się nie wykonuje, lecz otrzymane dane zgadzają się z tymi wysłanymi... :)
P-46327
pekfos
» 2011-12-26 19:32:49
Jeśli recvbuf to nie std::string na co nie wygląda, to odsyłam do podstaw..
P-46328
SeaMonster131
Temat założony przez niniejszego użytkownika
» 2011-12-26 21:12:35
Ale.. Coś mi mózg nie pracuje po świętach ;)
Tylko tym razem WSAGetLastError() przy odbieraniu danych przy serwerze pokazuje mi błąd 10014, co oznacza zły adres bądź tekst do odebrania jest większy niż dałem.. Eh, to bedzie droga przez mękę haha ;)
Ale i tak dzięki za pomoc, bo chyba bym sie nie skapnął, że to tylko taki głupi błąd :)
P-46336
« 1 »
  Strona 1 z 1