Salve, ho un problema nell'implementazione di un applicazione client-server, in sostanza ho creato 3 classi:
- Canale: è una classe a che ha come attributi un oggetto Socket e BufferedReader e BufferedWriter, nel costruttore assegno il socket in ingresso all'attributo Socket;
successivamente ho implementato il metodo per aprire i canali, in realtà assegna ai miei due attributi il references dei canali che sono stati associati al socket, nel seguente modo:
e quello per chiuderli.codice:BufferedReader in=new BufferedReader(new InputStream(socket.getInputStream())); BufferedWriter out=new BufferedWriter (new OutputStream(socket.getOutputStream()));
Inoltre i metodi write e read che servono per scrivere e leggere sul canale richiamando i metodi delle classi BufferedReader e BufferedWriter.
Il client riesce a connettersi al server ma funziona sole se dopo aver scritto o letto chiudo i canali con i metodi in.close() e out.close(), così l'applicazione server riesce a scrivere una stringa e quella client riesce a leggere, se non chiudo i canali rimane incantato. Successivamente a queste istruzioni ho inserito altre scritture e letture che non avvengono.
Il mio problema è che:
-se chiudo i canali ho scoperto che viene chiuso anche il socket, quindi una successiva apertura dei canali da parte del server andrebbe in fallimento.
-se non chiudo i canali non viene effettuata neanche la prima lettura da parte del client.
Ecco dovrei trovare un modo per mantenere aperti i canali per tutto il tempo di esecuzione delle applicazioni, durante il quale devo continuare a inviare e ricevere messaggi da parte di tutti e due gli host, pensavo che bastasse la flush() per forzare la vuotatura del canale e quindi dare la possibilità al client di effettuare una read, ma ciò non funziona se non richiamo la close() sui canali!
Grazie in anticipo