Chat Bate Papo usando Socket

Galera sou novo na area do java to com dificuldade em colocar a parte em que Quando o usuário Digita o Apelido verificar se esse apelido existe. E o mesmo informar que o apelido ja esta em uso e pedir para o usuario digitar novamente. segue o codigo:

Cliente Oficial

[code]
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class ClienteOficial {

public static void main(String[] args) throws IOException {

	Socket cliente_txt = new Socket("10.225.1.99", 12345);

	PrintWriter pw_socket = new PrintWriter(cliente_txt.getOutputStream(), true);

	Scanner teclado = new Scanner(System.in);
	System.out.println("Bem vindo ao Chat de Redes");
	
	System.out.print("Digite seu apelido: ");
	pw_socket.println(teclado.nextLine());
	new EsperaResposta(cliente_txt).start();
	
	System.out.println("Digite o texto para enviar:");
	String texto_para_enviar;
	
	
	do {
		 texto_para_enviar = teclado.nextLine();
		
			pw_socket.println(texto_para_enviar);
		}while (!texto_para_enviar.equals("sair"));
	

	teclado.close();
	pw_socket.close();
	cliente_txt.close();

}

}[/code]


[code]ClientT

import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Hashtable;
import java.util.Scanner;
import java.util.Vector;

import javax.swing.text.StyledEditorKit.ForegroundAction;

public class ClienteT extends Thread {
Socket cliente_s;

//O vetor abaixo e statico pq ele que trabalha com a sessões do clientes.
static Vector<PrintWriter> pw_clientes = new Vector<PrintWriter>();


ClienteT(Socket _cliente_s) throws IOException {
	cliente_s = _cliente_s;
	
	PrintWriter pw = new PrintWriter(cliente_s.getOutputStream(), true);
	pw_clientes.add(pw);
	
		
}
public void run() {
	
 String cliente_ip = cliente_s.getInetAddress().getHostAddress();
	String apelido = null;
	
	
	try {
		Scanner sc_socket = new Scanner(cliente_s.getInputStream());
		
		apelido = sc_socket.nextLine();
		
		
		
		
		
		System.out.println("Cliente " + apelido + " conectado. IP: "+cliente_ip);
		
		
		
		while (sc_socket.hasNextLine()) {
			String texto_recebido = sc_socket.nextLine();
			System.out.println(texto_recebido);
			
			for (PrintWriter p : pw_clientes) {
				p.println(apelido + ":" + texto_recebido);
			}
		}

		sc_socket.close();
		cliente_s.close();
	} catch (IOException e) {
		System.out.println("Erro na conexão!");
	}

	System.out.println("Cliente " + apelido + " desconectou.");

	
	
}

}[/code]


[code]

ServidorOficial

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class ServidorOficial {

public static void main(String[] args) throws IOException {

	new Thread(new Runnable() {
		public void run() {
			try {
				ServerSocket socket_s_txt = new ServerSocket(8080);

				System.out.println("Esperando clientes (8080)...");
				
				while (true) {
					Socket cliente_s = socket_s_txt.accept();
					new ClienteT(cliente_s).start();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}).start();

	

}

}[/code]


Espera Cliente

import java.io.IOException;
import java.net.Socket;
import java.util.Scanner;

class EsperaResposta extends Thread {
		Socket s;

		EsperaResposta(Socket _s) throws IOException {
			s = _s;
		}

		public void run() {

			Scanner sc;
			try {
				sc = new Scanner(s.getInputStream());
				while (sc.hasNextLine()) {
					String resposta = sc.nextLine();
					System.out.println(resposta);
				}

				sc.close();

			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}

	}