Przesyłanie obiektów przez sockety

0

Witam,
muszę za pomocą socketów przesłać tablicę obiektów z jednej aplikacji do drugiej. Połączenie nawiązuje się bez problemu. Nadawca wysyła tablicę w ten sposób:

w = new ObjectOutputStream(sock.getOutputStream());
w.writeObject((Klasa[]) tab_obiektow);

Zaś odbieranie wygląda tak:

od = new ObjectInputStream(sock.getInputStream());
tab_obiektow = (Klasa[]) od.readObject();  

Jednak odbiorca wywala IOException podczas próby odebrania danych. Próbowałem też wysyłać pojedynczo elementy tablicy, jednak jest ten sam problem. Co robię nie tak?

0

Pokaż więcej kodu, bo z tego trudno cokolwiek wywnioskować

0

A umiesz wypisać cały stacktrace? Bo jest tam zwykle napisane nie tylko jaki wyjątek poleciał ale też czemu...

0

stacktrace zwraca coś takiego:

local class incompatible: stream classdesc serialVersionUID = 8970813446731708789, local class serialVersionUID = 3587672860279433787

Różnica w klasach? Jak w takim razie skopiować klasę z jednej aplikacji do drugiej?

0

No ale masz przecież jak byk napisane w czym rzecz. Po prostu zamiast zrobić jara "commons" z klasami wspólnymi dla klienta i serwera skopiowałeś sobie źródła wspólnych klas w oba miejsca. Brawo. Oby tak dalej. Wróżę ci doskonałą przyszłość.
Chodzi o to że klasy które są serializowalne mają specjalne pole w klasie serial version id które musi być identyczne w klasach po obu stronach żeby JVM uznał że możesz wczytać jakiś strumień bajtów jako obiekt danej klasy.

0

Pierwszy raz w życiu takie coś robię...
Mógłbyś mi dokładniej wyjaśnić o co chodzi z tym "commons"? Masz na myśli osobnego jara zawierającą tę klasę, którą chcę przesyłać i z niego ją importować do serwera i klienta?

0

Tak, tak najprościej i najsensowniej to zrealizować. Zauważ że teraz gdybyś zmienił coś w tej klasie w kliencie to musiałbyś identyczną zmianę zrobić tez w serwerze. Tak się nie programuje bo byłoby to źródłem wielu błędów.

0

Dzięki za pomoc! Teraz już wszystko się pięknie przesyła.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.