DatagramSocket / DatagramPacket , como usar em um simples "hello world"?

E ai pessoal, sou novo no fórum e estou tentando aprender como se faz comunicação com o LocalHost para eu poder participar da robocup da minha escola mais pra frente.
Eu tentei fazer um exemplo, lendo a documentação online, da API java, mas não consegui sucesso, segue abaixo o que fiz, e se possível gostaria que me dessem algumas dicas sobre como fazer para receber um DatagramPacket de localhost porta 6000.
Funciona da seguinte maneira: o servidor fica ligado no terminal enviando as mensagens via localhost:6000 , ai você tem que pegar essas mensagens e fazer seu algorítmo para seu time jogar, mas o que eu quero aprender é só mostrar a mensagem enviada via localhost.

import java.net.*;

public class RecebeMensagem{


       public static void main(String args[]){

           byte[] rec = new byte[2048];
           String msgRec;

       try{
           DatagramSocket con = new DatagramSocket( 6000 , InetAddress.getLocalHost() ); 
           DatagramPacket recebe = new DatagramPacket( rec , 2048 );
           con.receive(recebe);
           msgRec = rec.toString();
           System.out.println("A mensagem recebida do localhost foi : "+msgRec);

           }catch(Exception e){
            System.out.println(e);
            }

       } 

}

Comecei a aprender java em agosto, então é muito provável que nesse código apareçam erros grotescos de sintaxe.

Obs: fiz uma busca no fórum antes de postas aqui e não encontrei o que eu queria.

vc tem que criar um inputstream para receber mensagens e um output stream !

procura exemplos de aplicacao com socket q vc vai ver como funfa!

Não é preciso usar InputStream ou OutputStream (só para Sockets normais, não DatagramSocket/DatagramPacket).
O seu problema é que você fez isto:

byte[] buffer = new byte[2048];
System.out.println (buffer.toString()); // você provavelmente vai imprimir algo parecido com "[B@02948"

Para converter um array de bytes em uma String, use o construtor de String (não sei de cor, mas acho que é assim):

byte[] buffer = new byte[2048];
System.out.println (new String(buffer, 0, comprimento_da_mensagem)); 

onde “comprimento_da_mensagem” é o comprimento da mensagem recebida, que você vai determinar não sei como (tradicionalmente você põe um cabeçalho nas mensagens para indicar o comprimento, já que os datagramas não vêm com essa indicação de comprimento).