Ciao a tutti!
Mi stò avvicinando alla programmazione client server e vorrei provare a scrivere una applicazione che utilizza le socket per trasmettere degli oggetti tramite la rete LAN.
Ho iniziato a guardare i tutorial sul mio sito preferito (java.sun.com) e ho provato a buttare giù un paio di righe di codice.
Ho implementato una classe dal nome Message (implements serializable)il cui costruttore crea un oggetto contenente una stringa:
Poi ho creato una classe Server che entra in un loop infinito in cui si occupa di accettare una connessione in entrata (serverSocket server = new ServerSocket(1428)codice:public Message (String message ) { this.message = message; }e di lanciare un thread per ogni client accettato.
Ogni thread ha il compito di leggere il messaggio del client, stamparlo sullo standard output e mandargli un oggetto che contiene la stringa "messaggio ricevuto".
Il fatto è che dopo aver ricevuto il primo messaggio e spedito il messaggio predefinito, mi esce con un errore, mentre il client continua a funzionare.
Qualcuno ha idea di cosa possa essere?Il codice allegato è corretto?
Mi sapreste dare dei consigli su come procedere per scambiare dei messaggi tra server e client facendo in modo che il server aspetti un messaggio prima di continuare con la sua esecuzione?
Vi allego degli stralci del codice che ho scritto(metto solo le parti significative):
Server:
Thread del Server:codice:public static final int porta = 1428; public Server () throws IOException { ServerSocket server = new ServerSocket (porta); while (true) { Socket client = server.accept(); System.out.println("Connection Accepted"); Thread connection = new ServerThread ( client.getInputStream() , client.getOutputStream() ); connection.start(); }
codice:public class ServerThread extends Thread { private ObjectInputStream input; private ObjectOutputStream output; public ServerThread (InputStream is, OutputStream os) { try { input = new ObjectInputStream ( is ); output = new ObjectOutputStream ( os ); } catch ( Exception e) { System.err.println ("Errore nel costruttore del Thread del Server: " + e ); } } public void run () { try { while (true) { System.out.println ("Leggo il messaggio in input e la stampo a video"); String Messaggio = ( ((Message) input.readObject() ).getMessage() ); System.out.println(Messaggio); System.out.println ("Provo a inviare un messaggio"); Message conferma = new Message ("Messaggio ricevuto!"); output.writeObject (conferma); output.flush(); System.out.println ("Svuotato il buffer di output,adesso riparto!"); } } catch (Exception e) { System.err.println ("Errore nel Thread del Server: "+ e ); } }


) e ho provato a buttare giù un paio di righe di codice.
Rispondi quotando