Przepraszam za objętość wiadomości, ale nie chcę bardziej namieszać.
Czyli taki kod w bieżącym programie powoduje blokadę?
Klient:
in = new ObjectInputStream(socket.getInputStream());
out = new ObjectOutputStream(socket.getOutputStream());
Serwer:
in = new ObjectInputStream(socket.getInputStream());
out = new ObjectOutputStream(socket.getOutputStream());
A taki kod w bieżącym programie wykonuje się zgodnie z oczekiwaniami?
Klient:
out = new ObjectOutputStream(socket.getOutputStream());
in = new ObjectInputStream(socket.getInputStream());
Serwer:
in = new ObjectInputStream(socket.getInputStream());
out = new ObjectOutputStream(socket.getOutputStream());
Dla mnie działanie drugiej wersji wydaje się logiczne, bo w momencie jak serwer tworzy swój strumień wejściowy, to strumień wyjściowy klienta już istnieje i zgodnie z tym, co jest napisane w dokumentacji blokada nie następuje. Póżniej serwer utworzy swój strumień wyjściowy i klient też będzie mógł utworzyć własny strumień wejściowy.
(...) nie przywiązywałem do kolejności tworzenia strumieni.
To znaczy, że tworzyłeś je w losowej kolejności, czy zawsze w tej samej, ustalonej?
Jeżeli w Twoich poprzednich programach zawsze masz pierwszą wersję kodu wymienioną wyżej i wszystko działa bez blokady, a w bieżącym programie występuje blokada, to faktycznie jest to dziwne.