Ajuda com multiclient e servidor UDP

Olá, gostaria de ajuda com um servidor e um cliente em java, aonde varios clientes podem mandar e receber mensagens pra um servidor e o servidor pode mandar e receber mensagens destes clientes.

Eu comecei fazendo algo mas to bem perdido com estes sockets, datagramas, etc…

Se alguém puder disponibilizar um exemplo de uma comunicação simples entre cliente e servidor com envio e recepção de mensagens, agradeceria se postasse aqui(não estou pedindo que façam o programa, estou pedindo só um exemplo pra mim ver se consigo entender o funcionamento)

Segue aí o código de cliente e servidor que começei(estão incompletos pois não sei como continuar depois dessa parte):

Cliente:

public class ClienteUDP {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

         {
      try
      {
            MulticastSocket socket = new MulticastSocket(7722); //multicastSocket eh pra receber
            
            DatagramSocket socket2 = new DatagramSocket(); //DatagramSocket eh pra enviar

            //Isso axo q faz parte do multicast socket
            InetAddress endereco = InetAddress.getByName("225.0.0.1");//325.0.0.1
            socket.joinGroup(endereco);
            //Isso axo q faz parte do multicast socket

            byte []msg = new byte[200];
            DatagramPacket datagrama = new DatagramPacket(msg, msg.length);
            socket.receive(datagrama);
            byte[] texto = datagrama.getData ();
            String textoRecebido = new String(texto);
            System.out.println (textoRecebido.trim() + " hehehe");
            System.out.println("Digita ai mano véio!!!");
            Scanner input = new Scanner(System.in);

            //agora irei enviar la resposta
            String resposta = input.nextLine();
            byte[] arrayTexto = resposta.getBytes();

            DatagramPacket datagrama2 = new DatagramPacket (arrayTexto, arrayTexto.length, endereco, 7722);
            socket2.send(datagrama2);

Servidor:

public class ServidorUDP {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

    {
        try
        {
            for (;;){
            DatagramSocket socket = new DatagramSocket();
            System.out.println("\nMensagem a ser replicada: ");
            System.out.print("Você quer Se conectar? Então digite \"S\", caso contrario digite \"N\"");
            //isso aqui seria pra pegar oq o servidor digita e manda pro cliente: String textouser = input.nextLine();
            String textouser = "Você quer Se conectar? Então digite \"S\", caso contrario digite \"N\"";
            byte[] texto = textouser.getBytes();
            InetAddress enderecoMulticast = InetAddress.getByName("225.0.0.1");
            DatagramPacket datagrama = new DatagramPacket(texto,texto.length,enderecoMulticast,7722);
            socket.send(datagrama);

            //Essa aqui vai ser a string q vai conter a resposta do cliente, c ele quer receber ou nao:
            byte[] dados = new byte[100];
            DatagramPacket datagrama2 = new DatagramPacket (dados, dados.length);
            socket.receive(datagrama2);
            byte[] recebido = datagrama2.getData();
            String resposta1 = new String (recebido);
                if(resposta1.equalsIgnoreCase("s")){
                    break;
                }else{
                    //FODA-SE VAI FICA AQUI PRA SEMPRE BIBA DO CARALHO
                }
            Thread.sleep(2000);
            }//fim do laço q tenta receber resposta do client

Segue um exemplo de chat UDP:

Tentei dar uma olhada no seu exemplo porém fiquei boiando, o seu tem várias classes que eu não entendi pra que servem, agradeço sua ajuda, mas eu gostaria de uma coisa mais simples, em ambiente texto mesmo… tipo, eu só queria entender o que tem que usar dentro destes datagrampackets, sockets, etc. pra ter uma comunicação basica entre cliente e servidor.

O que tem que ir dentro do pacote é você quem define. Mas geralmente colocamos:

  1. Um campo para o destinatário da mensagem;
  2. A mensagem.
  3. Informações de controle (tamanho da mensagem, checksum, etc).

Você chegou a ver o exemplo em TCP? Ele é bem simples.

Você deve organizar o seu protocolo de comunicação:

O TCP eu vi e até entendi… mas UDP é mais complicado, tive que refazer o cliente e o servidor mas nada ta dando certo…

O esquema que to querendo fazer no programa é: executo um servidor que vai ficar mandando mensagens pros clientes pedindo a opção S ou N, depois executo um cliente que vai receber esta mensagem e vai ter que enviar o S ou o N pro servidor, só que nesse tempo varios clientes podem se conectar no servidor e enviar o S ou N… essa é a parte que complica eu axo.

Tópico movido para o fórum de Java Avançado.