Closed marimarek closed 11 years ago
Ok, to popraw to. Chyba oprócz readData() nic nie trzeba będzie zmieniać - w konstruktorach wiadomości jest sprawdzane, czy jest odpowiednia liczba bajtów w gnieździe dla POSZCZEGÓLNYCH SKŁADOWYCH wiadomości, więc to zostaw.
Dodałem odpowiedniego patcha.
Usuneliście funkcję IMessage::isEnoughData sprawdzającą czy mamy dość bajtów, aby odczytać daną wiadomość. Wiem, że teraz jest to sprawdzane w konstruktorach wiadomości, ale problem polega na tym, że TCP nie gwarantuje tego, że nie pofragmentuje wiadomośći i nie wyśle jej w kawałkach(choć przy tak małych wiadomościach jst to mało prawdopodobne). Gwarantuje tylko tyle, że wiadomości dojdą w tej samej kolejności i że wogle zawsze dojdą. Teraz jeśli jakaś wiadomość zostanie podzielona na pół to później już do końca wszystko będzie się pierdzielić, bo będziemy zaczynali za każdym razem czytać w połowie wiadomości myśląc, że to jej początek. Ja to robiłem wcześniej tak, że sprawdzałem czy mamy wystarczająco danych, żeby przeczytać całą wiadomość bez usuwania niczego z bufora(socketa), a jak nie było wystarczająco danych to po prostu wychodizłem z funkcji czekając, aż przyjdzie wystarczająca ilość,