Cliente/Servidor duvida sobre socket

Pessoal tenho a classe abaixoq ue representa meu servidor que irá receber conexões de clientes. Minha dúvida é como eu faço um método no cliente que conecta no servidor ? E depois eu possa trabalhar com essa conexão enviando mensagens ?

########################################
Server
########################################
import java.io.;
import java.net.
;
import java.awt.;
import java.awt.event.
;
import javax.swing.;
import java.util.
;
import java.sql.*;

public class Server extends JFrame {
private JTextArea display;
//private static Hashtable listaIp;
private DatagramPacket sendPacket, receivePacket;
private DatagramSocket socket;
private int aux = 1;
private static Hashtable listaIps;

static {
listaIps = new Hashtable();
}

public Server()
{
super( “Servidor” );

  display = new JTextArea();
  getContentPane().add( new JScrollPane( display),
                        BorderLayout.CENTER );
  setSize( 400, 300 );
  show();

  try {
     socket = new DatagramSocket( 5000 );
  }
  catch( SocketException se ) {
     se.printStackTrace();
     System.exit( 1 );
  }

}

/**
* Adiciona na hashtable o nome e o ip do usuário que conectar
* @param nome String
* @param ip String
*/
public void addUsuario(String nome, String ip)
{
listaIps.put(nome, new String(ip));
}

public void waitForPackets()
{
while ( true ) {
try {
// Seta o pacote
byte data[] = new byte[ 100 ];
receivePacket = new DatagramPacket( data, data.length );

        // Espera por um pacote
        socket.receive( receivePacket );





        // Processa os pacotes
        display.append( "\nPacote recebido:" +
           "\nDo host: " + receivePacket.getAddress() +
           "\nHost port: " + receivePacket.getPort() +
           "\nCaracteres: " + receivePacket.getLength() +
           "\nTexto:\n\t" +
           new String( receivePacket.getData(), 0,
                       receivePacket.getLength() ) );

        // manda de volta para os clientes
        display.append( "\n\nMandando para os clientes...");
        sendPacket =
           new DatagramPacket( receivePacket.getData(),
                               receivePacket.getLength(),
                               receivePacket.getAddress(),
                               receivePacket.getPort() );
        socket.send( sendPacket );
        display.append( "Pacote enviado.\n" );
        display.setCaretPosition(
           display.getText().length() );
     }
     catch( IOException io ) {
        display.append( io.toString() + "\n" );
        io.printStackTrace();
     }
  }

}

public static void main( String args[] )
{
Server app = new Server();

  app.addWindowListener(
     new WindowAdapter() {
        public void windowClosing( WindowEvent e )
        {
           System.exit( 0 );
        }
     }
  );

  app.waitForPackets();

}

public void desconectar()
{

}

}

basicamente em socket.

import java.io.;
import java.net.
;

public class Client {
public static void main(String[] args)throws Exception {
BufferedReader br;
InputStreamReader isr;
InputStream is;
Socket s = new Socket(“localhost”,5000);
is = s.getInputStream();
isr = new InputStreamReader(is);
br = new BufferedReader(isr);
System.out.println(br.readLine());
s.close();
}
}

para saber mais … da uma olhda na documentação
http://java.sun.com/j2se/1.4.2/docs/api/index.html

e um exemplo pratico …
http://www.j2b.com.br/modules.php?name=Sections&op=printpage&artid=12