sockety problem

Problemy dotyczące programowania.

Moderatorzy: Moderatorzy, Administratorzy

Pajaczek
Użytkownik
Posty: 1439
Rejestracja: 2006-08-03, 13:16
Lokalizacja: Winny Gród

Re: sockety problem

Post autor: Pajaczek »

Ok, pewnie masz rację z poprawnością. Ale o ile dobrze zrozumiałem, a nie chce mi się teraz szukać, to write przepisze i tak recvMsgSize danych z Buffer (czyli w skrajnym przypadku cały bufor) i nie kończy tego dodatkowym zerem. Infern zaś twierdzi, że odebrane dane nie kończą się '\0', sam zaś oczekuje tego znaku na końcu, stąd w tej skrajnej sytuacji tego znaku na końcu nie będzie miał także w buforze. Poprawnie było by odczytując bufor spodziewać się max sizeof(Buffer) danych, lecz nie więcej niż do znaku '\0'.

Pytanie do Inferna, co się stanie w przypadku gdy recv odbierze dokładnie sizeof(Buffer) danych tak jak mu to zlecasz, gdzie spodziewasz się '\0' (nawet, jeśli wcześniej "wyczyściłeś" cały bufor)??

Edit: Ech... zapętliłem się z tym pierwszym akapitem. Oczywiście chodzi tylko o wyświetlenie, czy ogólniej strumień. Masz rację, wówczas przecież ten znak zera nie jest do niczego potrzebny :twisted: :rotfl:
Ostatnio zmieniony 2009-10-17, 15:21 przez Pajaczek, łącznie zmieniany 1 raz.
infern
Użytkownik
Posty: 268
Rejestracja: 2006-10-26, 14:38
Lokalizacja: Wrocław

Re: sockety problem

Post autor: infern »

Pajaczek pisze:Pytanie do Inferna, co się stanie w przypadku gdy recv odbierze dokładnie sizeof(Buffer) danych tak jak mu to zlecasz, gdzie spodziewasz się '\0' (nawet, jeśli wcześniej "wyczyściłeś" cały bufor)??
Wyświetli cały bufor a co za tym idzie nie będzie dziwnych danych, które istnieją gdy najpierw odbiorę 10 znaków a później 5 :-)
Pozdrawiam Tomek
Pajaczek
Użytkownik
Posty: 1439
Rejestracja: 2006-08-03, 13:16
Lokalizacja: Winny Gród

Re: sockety problem

Post autor: Pajaczek »

Czyli odebrane dane wówczas kończą się znakiem \0? Bo jeśli nie, to wyświetli cały bufor... i wiele więcej... aż nie trafi w pamięci na \0. Przecież recv zastąpi całą tablicę Buffer, łącznie z ostatnim wpisanym tam przez Ciebie znakiem \0.
ODPOWIEDZ