Witam.
Z tego co "mówi" google, wynika, że jest to błąd spowodowany brakiem możliwości odbioru danych, z powodu zamknięcia połączenia. Jednak próbuje dojść do ładu z moim kodem i nie jestem w stanie tego naprawić. Poniżej przedstawię najważniesze fragmenty kodu. Dopóki któryś z klientów się nie rozłączy, wszystko działa, czyli do serwera może się podłączyć nieograniczona liczba klientów, jeśli klient łączy się z serwerem to każdy podłączony do serwera klient dostaje wiadomość o tym kto połączył się z serwerem. Każdy podłączony może wysyłać tekst, który pokazuje się na ekranach każdego podłączonego do serwera w danym momencie klienta. Jednak, gdy tylko jakiś klient się rozłączy, to komunikacja zaczyna szwankować (pojawia się błąd jak w temacie). Wysyłane wiadomości docierają nie do wszystkich podłączonych użytkowników. Czy jest mi ktoś w stanie podpowiedzieć, co jest nie tak?

//Server - klasa odpowiedzialna za komunikację 

        class ServerReadingStreamsThreadClass implements Runnable{ 
        
                private Socket nowe_gniazdo; 
                private DataInputStream dane_wej; 
                private DataOutputStream dane_wyj; 
                private JTextArea okno_danych; 
                 public static ArrayList<DataOutputStream> nowy_klient = new ArrayList<DataOutputStream>(); 
                        
        ServerReadingStreamsThreadClass(Socket nowe_gniazdo,JTextArea okno_danych){ 
                this.nowe_gniazdo = nowe_gniazdo; 
                this.okno_danych = okno_danych; 
                } 
                
                public void run() { 
                        String message; 
                        try{ 
        dane_wej = new DataInputStream(nowe_gniazdo.getInputStream()); 
        dane_wyj = new DataOutputStream(nowe_gniazdo.getOutputStream()); 
                nowy_klient.add(dane_wyj); 
                        }catch (IOException e) { 
                                e.getMessage(); 
                        } 
                while(true){ 
                        try{ 
                        while((message = dane_wej.readUTF())!=null){ 
                        Iterator ilu_podlaczonych = nowy_klient.iterator(); 
                        appendText("\n"+message); 
                        while(ilu_podlaczonych.hasNext()){ 
                dane_wyj = (DataOutputStream) ilu_podlaczonych.next(); 
                dane_wyj.writeUTF(message); 
                                } 
                                } 
                                }catch (IOException e) { 
                        System.err.print("\nServer: "+e.getMessage()); 
                                } 
                        } 
                }        
                        //metoda pobierająca dane z pola_danych (metoda dostępna tylko dla jednego wątku) 
                        public synchronized void appendText(String line){ 
                    okno_danych.append(line); 
                        } 

                        //metoda zamykająca połączenie 
                        protected void finalize(){ 
                                     try{ 
                                        nowe_gniazdo.close(); 
                        System.out.print("Zamknięto nowe gniazdo"); 
                                    } catch (IOException e) { 
                        System.err.println("Nie można zamknąć gniazda"); 
                                        System.exit(-1); 
                                    } 
                                  } 

                } 
        

//Server: klasa wywołująca komunikacją i uruchamiająca server: 


        class ServerCommunicationClass { 

        private static ServerSocket server_socket; 
        private static DataOutputStream out_data; 
        
        //metoda odpowiedzialna za przyjmowanie połączeń (wielu połączeń) 
        public static void nowy_server_service(int port,JTextArea receive_field){ 
                
                try{ 
                        server_socket = new ServerSocket(port); 
                        receive_field.append("Serwer jest uruchomiony"); 
                }catch (IOException e) { 
                        e.getMessage(); 
                } 
                while(true){ 
                        ServerReadingStreamsThreadClass serv_thr_class; 
                        try{ 
        serv_thr_class = new ServerReadingStreamsThreadClass(server_socket.accept(),receive_field); 
                                Thread server_thread = new Thread(serv_thr_class); 
                                server_thread.start(); 
                        }catch (IOException e) { 
                                e.getMessage(); 
                        } 
                } 
        } 
        
        
} 

//Klient: Metoda Klienta (rozłączająca): 

public void disconnect(){ 
                try{ 
                out_data.writeUTF("<"+user+">"+" jest niedostępny."); 
                in_data.close(); 
                out_data.close(); 
                client_socket.close(); 
                }catch (IOException e) { 
                        System.err.print("Client: "+e.getMessage()); 
                }catch (NullPointerException e) { 
                        System.err.print("Client: "+e.getMessage()); 
                        System.exit(-1); 
                } 
        } 

Pozdrawiam