Ho un problemino con la comunicazione tra client e server.

Ho un server che ha una serverSocket che rimane in ascolto con un timeout di 5 secondi.

ecco il codice del client :

codice:
private void connetti(String ip, int porta) {

		try {
			
			Socket clientSocket = new Socket(ip, porta);
			clientSocket.setSoTimeout(5000);	
			Thread.sleep(7000);		//Simulazione di ritardo
			
			PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
			BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
			BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
			
			if(clientSocket.isConnected())
				System.out.println("Connessione stabilita con il Server "+format(clientSocket)+"\n");
			
			while (true) {
				System.out.print("Client > ");
				String userInput = stdIn.readLine();
				
				if(userInput.equalsIgnoreCase("quit")){
					System.out.println("Connessione terminata con il Server "+format(clientSocket));
					break;
				}
				else if(clientSocket.isClosed()){
					System.out.println("Connessione terminata con il Server "+format(clientSocket));
					break;
				}
				out.println(userInput);
				out.flush();
			}

			stdIn.close();
			in.close();
			out.close();
			clientSocket.close();

		} catch (UnknownHostException e) {
			System.out.println("Impossibile connettersi al Server "+ip+":"+porta+" Host sconosciuto!");
		} catch (IOException e) {
			System.out.println("Errore nella connessione con il Server "+ip+":"+porta);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}	
	}
Volendo simulare un ritardo ho inserito nel client Thread.sleep(7000), in questo modo dopo aver creato il socket aspetta 7 secondi, nel frattempo il server ha chiuso la socket....il problema è che mi inizializza lo stesso gli stream ed entra lo stesso nel ciclo while...come mai?

Grazie