Robię prosty programik, taki mini chat. Łącze klienta z serwerem po czym wymieniam informacje między nimi. Wszystko działa tylko mam problem bo chciałbym aby po wyłączeniu przez jednego z nich programu, drugiemu się wyświetliła prosta informacja o rozłączeniu rozmówcy, jednakże program mimo iż druga osoba sie rozłączyła nadal wydaje się połączony: client.isConnected() nadal zwraca true, a funkcja isClosed() false.
Gdy jeden klient kończy program wykonuję niniejsze instrukcje:
public void Disconnect() throws IOException{
client.shutdownInput();
client.shutdownOutput();
outp.close();
inp.close();
if(client!=null)client.close();
if(server!=null)server.close();
}
Powyższa metoda zawarta jest w klasie Poloczenie.
A to linijka która niby źle działa:
if(!stan.client.isConnected()){
dialog.setText(dialog.getText()+"\n"+stan.logint+" - został rozłączony");
work=false;
}else{
try {
if(stan.inp.ready()){
cos = stan.Odbierz();
}
} catch (IOException ex) {
Logger.getLogger(Chat.class.getName()).log(Level.SEVERE, null, ex);
}
}
Te linijki są wykonywanie w drugim wątku tuż obok tego który odpowiada za interfejs (w swing).
Zaś stan to obiekt klasy Poloczenie, który posiada zarówno obiekt klasy SercerSocket (server) i Socket (client), a work to zmienna pętli drugiego wątku: "while(work)...". Obiekt inp to obiekt klasy BufferedReader pobierający strumień z sieci.
Błędów w kompilacji ani podczas uruchamiania nie ma a jednak nie działa jak powinno.
Podpowiedzcie i piszcie co ew. potrzebujecie aby my pomóc( co znaczy jaki element kodu ;)).