Winsock przesyłanie danych
Ostatnio zmodyfikowano 2016-08-29 09:49
CTRL85 Temat założony przez niniejszego użytkownika |
Winsock przesyłanie danych » 2016-08-29 01:55:21 Witam!
Zacząłem się interesować obslugą sieci i napotkalem na pewien problem - do przesyłanego tekstu na końcu dodawany jest jeden znak i nie mam pojęcia dlaczego tak jest.
Kod serwera: http://pastebin.com/tqTJXUJC
Kod klienta: http://pastebin.com/TG7EnwHz
Mała wizualizacja tego, co się dzieje:
http://iv.pl/images/27726679623116539498.png
Bardzo proszę o pomoc.
|
|
j23 |
» 2016-08-29 09:49:01 Dodaje Ci ten jeden znak na końcu, bo odebrany łańcuch nie ma null-terminatora na końcu. Wystarczy go dodać: BackResult = recv( ClientSocket, recvbuf, recvbuflen, 0 ); if( BackResult > 0 ) { recvbuf[ BackResult ] = '\0'; cout << "Bajty odebrane: " << BackResult << endl; cout << "Wiadomosc odebrana: " << recvbuf << endl; ...
Generalnie wysyłane wiadomości powinny mieć dodany na końcu jakiś znak oznaczający ich koniec, bo może być tak, że recv nie odbierze całej wiadomości za jednym razem, i wtedy może być problem. string TmpMsg = "";
cout << "Wiadomosc do wyslania: "; cin >> TmpMsg;
char * sendbuf = _strdup( TmpMsg.c_str() ); |
Po co to strdup? Przecież możesz od razu wysłać z TmpMsg: if( send( ConnectSocket, TmpMsg.c_str(),( int ) TmpMsg.size(), 0 ) == SOCKET_ERROR ) {...} Nigdzie nie zwalniasz sendbuf, więc jest wyciek pamięci. |
|
« 1 » |