Sockets+threads...muitas dúvidas!

Galera eu tenho que fazer dois exercícios…
o primeiro:
1 - Modifique o servidor para retornar ao cliente, através do socket, o conteúdo recebido. Isto é, o servidor dá um “eco” ao cliente do conteúdo enviado. O cliente mostra na tela o eco recebido.

2 - Implemente um servidor que recepciona vários clientes. Quando o servidor receber uma conexão este deve criar um novo thread e copiar o socket para ele. Armazene as threads em um vetor.

O que eu fiz até agora foi isso:

Cliente:

import java.io.*;
import java.net.*;
import javax.swing.*;
public class Client {
	
	public static void main(String a[]){
		try{
			Socket con=new Socket("casa1",1025);
			System.out.println("...cliente conectado");
			String msg="";
			OutputStream saida=con.getOutputStream();
			PrintWriter out=new PrintWriter(saida,true);
			msg=JOptionPane.showInputDialog("Digite a mensagem:");
			out.println(msg);
		}catch(SocketException e){System.out.println("erro:" +e);}
		catch(IOException e1){e1.printStackTrace();}
	System.exit(0);
	}
}

Servidor

import java.io.*;
import java.net.*;
public class Server{
	public static void main(String a[]) {
		try{
			String mensagem="";
			ServerSocket servidor=new ServerSocket(1025);
			System.out.println("...Servidor conectado");
			
			Socket cliente=servidor.accept();
			InputStream entrada=cliente.getInputStream();
			InputStreamReader leitor=new InputStreamReader(entrada);
			BufferedReader in=new BufferedReader(leitor);
			mensagem=in.readLine();
		}catch(SocketException e){e.printStackTrace();}
		catch(IOException e1){e1.printStackTrace();}
		System.exit(0);
	}
}

Pessoall, dessa vez realmente preciso da ajuda de vc´s…
Vou passar a madrugada toda estudando…
[]´s

Usando ObjectOutputStream…
1- ecoar ne so mandar de volta pro cliente?! Entao depois de receber vc pode fazer um metodo q é chamado e…

try{
socket.writeObject(menssagem);
...
}

2- Tendo a classe Teste subclasse de Thread…

try{
Teste teste = new Teste(socket);
teste.start();
...
}

8O 8O 8O