[C++, Winsock] Problem z przesyłaniem i odbieraniem danych
Ostatnio zmodyfikowano 2011-12-26 21:12
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: if( al_key_down( & klaw, ALLEGRO_KEY_RIGHT ) ) { 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: iResult = recv( ClientSocket, recvbuf, 20, 0 ); if( iResult > 0 ) { cout << "\nOtrzymane: " << recvbuf; if( recvbuf == "####Strzalka w prawo" ) { 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... :) |
|
pekfos |
» 2011-12-26 19:32:49 Jeśli recvbuf to nie std::string na co nie wygląda, to odsyłam do podstaw.. |
|
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 :) |
|
« 1 » |