Graande!grazie!
Originariamente inviato da LeleFT
InputStream e OutputStream sono gli oggetti con i quali costruire gli ObjectInputStream e ObjectOutputStream.
Ecco del codice d'esempio (supponiamo che la Socket si chiami, per comodità socket):
Ovviamente questa cosa è semplicemente dimostrativa: il server sa che il client gli manderà il messaggio, quindi lo attende ed il client, viceversa, sa che dopo aver inviato un messaggio al server, riceverà una risposta. Cosa che in una chat non succede per niente: il server non sa QUANDO riceverà un messaggio dal client ed il client a sua volta non sa SE riceverà un messaggio dal server.codice:--- Lato Client --- ObjectInputStream ois; ObjectOutputStream oos; try { // Costruisco l'oggetto per ricevere i messaggi dal server ois = new ObjectInputStream( socket.getInputStream() ); // Costruisco l'oggetto per mandare i messaggi al server oos = new ObjectOutputStream( socket.getOutputStream() ); // Mando un messaggio al server oos.writeObject("Ciao, io sono il client!"); // attendo la risposta dal server String risposta = ((String) ois.readObject()); // Stampo la risposta del server System.out.println("Il server ha risposto: " + risposta); } catch (Exception e) {} --- Lato server --- ObjectInputStream ois; ObjectOutputStream oos; try { // Costruisco l'oggetto per ricevere i messaggi dal client ois = new ObjectInputStream( socket.getInputStream() ); // Costruisco l'oggetto per mandare i messaggi al client oos = new ObjectOutputStream( socket.getOutputStream() ); // attendo un messaggio dal client String messaggio = ((String) ois.readObject()); // Stampo il messaggio del client System.out.println("Il client mi ha mandato un messaggio: " + messaggio); // Mando la risposta oos.writeObject("Messaggio ricevuto."); } catch (Exception e) {}
Per modellare questa situazione, uno strumento valido sono i thread: basta inserire l'oggetto di ricezione messaggi in un thread (sia nel server che nel client), in modo che quando arriva un messaggio se ne occupi lui. Per i messaggi in uscita è semplice: quando l'utente invia il messaggio il client effettua una chiamata al metodo writeObject(). Di solito il server non invia messaggi di sua iniziativa, ma si occupa semplicemente di rispedire un messaggio di un utente agli altri client collegati, quindi la chiamata al metodo writeObject() nel server dovrà per forza seguire la ricezione di un messaggio.
Gli oggetti InputStream e OutputStream possono essere utilizzati anche per costruire degli oggetti BufferedInputStream e BufferedOutputStream.
Ciao.