Ciao, a tutti!!
Nel mio programma ho un thread che sta in ascolto su una ServerSocket e ogni volta che esegue una accept crea un thread per la comunicazione sulla Socket creata dalla accept, il codice è il seguente:
codice:
public class TaskServerSocket implements Runnable{
private Server ser;
public TaskServerSocket(Server ser) {
this.ser= ser;
}
public synchronized void run() {
while(true) {
try {
Socket s = ser.getServSock().accept();
//Aggiungo un elemento al vettore delle connessioni
ser.getConnessioni().addConnessione(new Connessione(s, ser));
System.out.println("Stabilita connessione con: "+ s.getInetAddress().getHostAddress());
} catch(IOException ex) {
System.out.println(ex);
}
}
}
}
Con la creazione dell'oggetto connessione viene creato il thread per la comunicazione:
codice:
public class Connessione {
private Socket s;
private long timeRif;
private Thread threadServerQuery;
private Server ser;
public Connessione(Socket s, Server ser) {
Date h = new Date();
this.s = s;
this.timeRif = new Long(h.getTime());
this.ser = ser;
TaskServerQuery sq = new TaskServerQuery(s, ser);
threadServerQuery = new Thread(sq);
threadServerQuery.start();
}
....
}
Il metodo run della classe TaskServerQuery è il seguente:
codice:
public void run() {
System.err.println("Server Query attivo [" + s.getInetAddress().getHostAddress() + "]");
ObjectInputStream input = null;
ObjectOutputStream output = null;
Messaggio m = null;
try {
input = new ObjectInputStream(s.getInputStream());
System.out.println("Input stram creato");
} catch (IOException ex) {
System.err.println("ECC0: " + ex);
}
....
}
Il problema è nella riga in rosso, il thread si blocca su questa riga e quando la connessione viene chiusa, ovvero un altro thread rimuove il relativo elemento di tipo Connessione dal vettore delle connessioni, viene stampata la seguente eccezione:
codice:
ECC0: java.io.EOFException
Sapete dirmi dov'è l'errore? Perchè non riesce ad ottenere l'input stream associato alla socket??
Grazie