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:
codice:
public Message (String message ) {
this.message = message;
}
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)
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:
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();
}
Thread del Server:
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 );
}
}