E' quel che pensavo anch'io ma la variabile socket e' una variabile locale e percio' penso ne venga creata una nuova ad ogni passata del ciclo while(true) (scope). Infatti se faccio qualcosa di questo tipo:Originariamente inviato da LeleFT
Potresti postare un po' più di codice o mettere a disposizione per il download il codice completo? In questo modo sarebbe più semplice provare l'applicazione o quantomeno tentare di capire qual è il passaggio che fallisce.
In applicazioni di tipo client/server ci sono una infinità di motivi per cui la connessione viene perduta.
A me verrebbe in mente una situazione del genere (potrebbe non essere il problema):
1) Fai una accept e ricevi una Socket sulla variabile client
2) Elabori la richiesta (creando il PrintWriter e tutto quel che ci va dietro)
3) Torni in attesa di una seconda connessione.
4) A questo punto l'istruzione accept sostituisce la soket precedente e la connessione viene perduta.
Ciao.![]()
tutto va secondo le previsioni ovvero ogni ResThread riesce ad utilizzare correttamente il socket di competenza. Il problema si crea quando sia il server (Quello che fa l'accept) che i singoli thread utilizzano degli stream di I/O dallo stesso socket.codice:while (true) { try { //Non setto nessun timeout perche' il mio compito e' soltanto quello di attendere connessioni in entrata incoming = ss.accept();//Chiamata bloccante } catch(IOException e) { System.out.println("Taxi Reservation Handler " + tm.getTaxiName() + "> errore durante la ricezione di prenotazioni sul server socket."); continue;//Passo alla prenotazione successiva } ResThread rt = new ResThread(incoming); rt.start(); }
Ad esempio se il server, prima di passare il socket al ResThread, avesse inviato una risposta al client tramite un OutputStream, nel momento in cui il thread avesse tentato di utilizzare a sua volta un output stream dello stesso socket si sarebbe verificato un errore.
Il problema potrebbe essere che avrei dovuto prima chiudere il PrintWriter creato dal server e quindi passare il socket al thread ??

Rispondi quotando