Jak powiedział Damon Gant, TCP jest protokołem transmisji strumieniowej. Proponuję utworzyć własny protokół. Nie wysyłałbym strun. Jeśli robisz coś niebanalnego, to jest to naprawdę najlepsza droga.
Zazwyczaj do nagłówków protokołów dołączam magiczną liczbę, sumę kontrolną, długość pakietu w bajtach i wersję protokołu. Magiczna liczba ułatwia definiowanie pakietów w strumieniu (bardzo przydatne do debugowania niestandardowego strumienia protokołu). Posiadanie sumy kontrolnej pomaga zapewnić poprawne analizowanie danych. Suma kontrolna nie pomaga zbytnio w integralności przez TCP, ponieważ protokół TCP ma już sumę kontrolną. Długość ciała pakietu pomaga wykryć, kiedy masz wszystkie bajty dla swojego pakietu. Wersja protokołu może pomóc ci w interpretacji bajtów treści pakietu.
Po otrzymaniu danych umieść wszystkie bajty w osobnym buforze i zeskanuj nagłówek protokołu. Jeśli możesz przeanalizować nagłówek, sprawdź, czy wszystkie bajty pakietu są obecne. Jeśli tak, przeanalizuj pakiet. Powtarzaj ten proces, aż znajdziesz niekompletny pakiet lub bufor jest pusty.
Dla każdego pakietu, który chcesz wysłać, utworzę klasę. Gdy chcesz wysłać pakiet, utwórz i serializuj poprawną klasę i dodaj nagłówek protokołu dla bajtów tej klasy.
Możesz użyć serializatora Java, ale jeśli masz wielu klientów łączących się z jednym serwerem, prawdopodobnie nie chcesz używać Javy dla serwera. To sprawia, że rzeczy są trudne, ponieważ teraz musisz zaimplementować serializator java w innym języku. Z tego powodu zazwyczaj lepiej jest konwertować twoje pakiety do bajtów ręcznie (nużące, ale proste). LUB możesz napisać swój własny serializator za pomocą odbicia. Proponuję to drugie na większe projekty.
Czy debugowania, aby dowiedzieć się, czy k jest> 1? –
K = 1. Jeśli dobrze to pojmuję, powinna to być liczba elementów w tablicy bajtów. Ale ponieważ istnieje tylko jeden element, k = 1. – Kubik
Spróbuj wypróżnić wyjście po wysłaniu danych. –