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:
Con la creazione dell'oggetto connessione viene creato il thread per la comunicazione: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); } } } }
Il metodo run della classe TaskServerQuery è il seguente: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 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: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); } .... }
Sapete dirmi dov'è l'errore? Perchè non riesce ad ottenere l'input stream associato alla socket??codice:ECC0: java.io.EOFException
Grazie

Rispondi quotando