Socket com threads em java

Pessoal Peguei esse código na net para poder entender e dar continuidade com outras aplicações, já modifiquei ele… A duvida é o seguinte.

Como faco para o servidor enviar uma mensagem quando o cliente se conectar? neste exemplo ele não envia, o cliente tem que enviar primeiro, pois no cliente ja pede para digitar, o servidor tem que enviar primeiro que o cliente.

public class Servidor extends Thread{

public static void main(String args[]){
          
	ServerSocket s = null;
	try{//tentando criar uma conexao
		s = new ServerSocket(40000);//Cria um SocketServer com porta 40000
                     System.out.println("       <<Servidor iniciado>>");
                     System.out.println("<<Aguardando conexão na Porta 40000>>");
		while(true){
           /* Cria um objeto Socket, mas passando informações características de um servidor,
            *no qual somente abre uma porta e aguarda a conexão de um cliente 
            */
			Socket conexao = s.accept();
                            System.out.println("Conexao estabelecida com eleitor com o ip: " + conexao.getInetAddress().getHostAddress());
			//cria uma thread que envia a conexao
			Thread t = new Servidor(conexao);
			//inicia a thread t
			t.start();

   
		}
	}catch(IOException e){
		System.out.println("IOException "+e);
	}
}
private Socket conexao;
public Servidor(Socket s){//recebe o valor do socket enviado na thread
	conexao = s;
}
public void run(){
	try{
    // Cria uma buffer que irá armazenar as informações enviadas pelo cliente
    BufferedReader inFromClient = new BufferedReader(new InputStreamReader(conexao.getInputStream()));
        // Cria uma stream de sáida para retorno das informações ao cliente
        DataOutputStream outToClient = new DataOutputStream(conexao.getOutputStream());
       
        // Faz a leitura das informações enviadas pelo cliente as amazenam na variável "EscritaCliente"
        String EscritaCliente = inFromClient.readLine();
        // Imprime a String modificada no console do servidor
        System.out.println("Voce Digitou: "+EscritaCliente.length()+" Digitos");
        // Imprime a String modificada no console do cliente
        outToClient.writeBytes("Voce Digitou: "+EscritaCliente.length()+" Digitos");
	}catch(IOException e){
		System.out.println("IOException "+e);
	}
}

}

public class Cliente extends Thread {
public static void main(String args[]){

	try{
		// Cria um Socket conexao passando como parâmetro o ip e a porta do servidor 
		Socket conexao = new Socket("localhost",40000);
                    System.out.println("Conectado ao servidor " + "localhost" + ", na porta: " + 40000);
		//cria uma thread que envia a conexao
		Thread t = new Cliente(conexao);
		//inicia o thread
		t.start();
    
	}catch(IOException e){
		System.out.println("IOException"+e);
	}
}
private Socket conexao;
public Cliente(Socket s){//recebe o valor do socket enviado na thread
	conexao = s;
}
public void run(){
	try{//cria uma printstream para pegar as informacoes enviadas do servidor
		PrintStream saida = new PrintStream(conexao.getOutputStream());
		//cria um bufferedreader para receber informacoes digitadas
		BufferedReader teclado = new BufferedReader (new InputStreamReader(System.in));
		//escreve uma mensagem ao usuario
		System.out.println("entre com algum digito");
		//digito recebe o valor digitado pelo usuario
		String digito = teclado.readLine();
		//imprime o valor de digito
		saida.println(digito);
		BufferedReader entrada = new BufferedReader(new InputStreamReader(conexao.getInputStream()));
		entrada.readLine();				
	}catch(IOException e){
		System.out.println("IOException"+e);
	}finally{
		try {
			conexao.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

}

segue as classes acima.

ServerSocket server = new ServerSocket(8080);
Socket client = server.accept();
PrintWriter clientWriter = new PrintWriter(client.getOutputStream(), true);
clientWriter.println("Bem vindo, cliente!");

valeu irmao,
Tem outro problema, consigo enviar uma mensgaem ao cliente mais tento retornar a mensagem e o cliente nao recebe

Amigo testei o que vc falou mais ele dar o erro

java.io.BufferedReader@9fbb4f8

Isso não é um erro. É a representação de um objeto em string. Você está imprimindo um BufferedReader ao invés de imprimir uma string.

Você falou que consegue enviar a mensagem ao cliente e depois falou que o cliente não recebe. Não entendi o que você quis dizer. Retornar a mensagem? Como assim?

Desculpa errei ai, é ao contrario…
Envio para o servidor, ele recebe ai tento retornar a mensagem para o cliente ai o cliente não recebe.