Erro Chat no netbeans

Olha para todos! esse é meu primeiro acesso ao forum.

To implementando um chat só via socket.`Bom é pro programa mandar uma mensagem para todos os cliente conectados, mas ele só envia para se mesmo.

algum pode me ajudar. ai vai o código completo.

Classe Cliente:

                     [b]import java.io.DataOutputStream;
                         import java.io.IOException;
                         import java.net.*;
                         import javax.swing.JOptionPane;

public class Cliente {

private Socket socket_cliente;

private DataOutputStream saida;
private RecebedorMsgCliente receber;
private String host;
private int porta;

    public Cliente(String host, int porta) {
            setHost(host);
            setPorta(porta);
    }

    public String getHost() {
            return host;
    }

    public void setHost(String host) {
            this.host = host;
    }

    public int getPorta() {
            return porta;
    }

    public void setPorta(int porta) {
            if (porta <= 0) {
                    throw new IllegalArgumentException("Porta deve ser um número positivo");
            }

            this.porta = porta;
    }


public void init(){

    try{
            socket_cliente=new Socket(host,porta);

            receber=new RecebedorMsgCliente(socket_cliente.getInputStream());
            receber.start();



    }catch(UnknownHostException e){
        JOptionPane.showMessageDialog(null, e.getMessage());

    }catch(IOException e){
        JOptionPane.showMessageDialog(null, e.getMessage());
    }
}

public void enviaMensagens(String texto) {
try {

                    saida=new DataOutputStream(socket_cliente.getOutputStream());
                    
                    saida.writeUTF(texto);
                    
            }catch (IOException e) {

                JOptionPane.showMessageDialog(null,e.getMessage());
            }
    }

}[/b]

Classe Thread:

[b]import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.swing.JOptionPane;
[color=#444444][/color]

public class RecebedorMsgCliente extends Thread {
private DataInputStream entrada;
InputStream in;
public RecebedorMsgCliente(InputStream in) {

        this.in=in;
    }

@Override
    public synchronized void start() {
            super.start();
    }

@Override
   public void run(){

       entrada=new DataInputStream(in);
    try {
        
       
        String a =entrada.readUTF();
        Chat.jTextAreaChat.append("\n"+a);
    } catch (IOException ex) {
        JOptionPane.showMessageDialog(null, ex.getMessage());
    }
       

   }

}[/b]

Classe Servidor:

[b]import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.*;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;

public class Servidor {

       private ServerSocket socketServidor;
       private Socket       socketCliente;
       private DataOutputStream saida;
       private DataInputStream  entrada;
       private final int porta=1234;
       private List<Socket> clientes;

public Servidor(){

      //super();
    
      clientes = new ArrayList<Socket>();

}

public void init(){
    try {
            socketServidor=new ServerSocket(porta);
            while(true){
            socketCliente = socketServidor.accept();
            System.out.println("Nova conexão com o cliente " + formataCliente(socketCliente));

            clientes.add(socketCliente);

            RecebedorMsgServidor recebedor = new RecebedorMsgServidor(socketCliente.getInputStream(), this);
            recebedor.start();
            }
    } catch (IOException ex) {

        JOptionPane.showMessageDialog(null, ex.getMessage());
    }
   
    
    
}

public void distribuiMensagem(String msg) {
    try {
            for (Socket cliente : clientes) {

                    saida=new DataOutputStream(socketCliente.getOutputStream());
                    saida.writeUTF(formataCliente(cliente) + ": " + msg);
                    
            }
    } catch (IOException e) {
            JOptionPane.showMessageDialog(null,e.getMessage());
    }
}

private String formataCliente(Socket cliente) {

    return cliente.getInetAddress().getHostAddress() + ":" + cliente.getPort();
}
public static void main(String arges[]){

    Servidor c=new Servidor();
    c.init();
    
}

}[/b]

Classe Thread:

[b]import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.swing.JOptionPane;

 public class RecebedorMsgServidor extends Thread {

        private DataInputStream entrada;
        private InputStream in;
        private Servidor serv;
public RecebedorMsgServidor(InputStream in,Servidor serv) {

   this.in=in;
   this.serv=serv;
}

@Override

public void run(){

entrada=new DataInputStream(in);
    try {
        String a = entrada.readUTF();
        
        serv.distribuiMensagem(a);
        
    } catch (IOException ex) {
       JOptionPane.showMessageDialog(null, ex.getMessage());
    }

}

}[/b]

Classe do Chat interface:

[b]public class Chat extends javax.swing.JFrame {

public static Cliente cliente;

public Chat() {
    initComponents();
    cliente=new Cliente("localhost",1234);
    //cliente.init();
}

//BUTÂO

private void jButtonEnviarActionPerformed(java.awt.event.ActionEvent evt) {

    //cliente=new Cliente("localhost",1234);
    cliente.init();
    cliente.enviaMensagens(jTtexto.getText());
    
    
} [/b]

PelamordeDEUS galera.
Vamos ler o que está sendo solicitado aqui http://guj.com.br/java/50115-voce-e-novo-no-guj-vai-criar-um-topico-e-colar-seu-codigo-fonte-leia-aqui-antes-por-favor para colocar código fonte.

Foi mal ai galera…

import java.io.DataOutputStream;
import java.io.IOException;
import java.net.*;
import javax.swing.JOptionPane;


public class Cliente {

    private Socket socket_cliente;
    
    private DataOutputStream saida;
    private RecebedorMsgCliente receber;
    private String host;
    private int porta;

        public Cliente(String host, int porta) {
                setHost(host);
                setPorta(porta);
        }

        public String getHost() {
                return host;
        }

        public void setHost(String host) {
                this.host = host;
        }

        public int getPorta() {
                return porta;
        }

        public void setPorta(int porta) {
                if (porta <= 0) {
                        throw new IllegalArgumentException("Porta deve ser um número positivo");
                }

                this.porta = porta;
        }


    public void init(){

        try{
                socket_cliente=new Socket(host,porta);

                receber=new RecebedorMsgCliente(socket_cliente.getInputStream());
                receber.start();



        }catch(UnknownHostException e){
            JOptionPane.showMessageDialog(null, e.getMessage());

        }catch(IOException e){
            JOptionPane.showMessageDialog(null, e.getMessage());
        }
    }
   public void enviaMensagens(String texto) {
                try {

                        saida=new DataOutputStream(socket_cliente.getOutputStream());
                        
                        saida.writeUTF(texto);
                        
                }catch (IOException e) {

                    JOptionPane.showMessageDialog(null,e.getMessage());
                }
        }

}

Classe thread:

import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.swing.JOptionPane;


public class RecebedorMsgCliente extends Thread {
        private DataInputStream entrada;
InputStream in;
        public RecebedorMsgCliente(InputStream in) {

            this.in=in;
        }

    @Override
        public synchronized void start() {
                super.start();
        }

    @Override
       public void run(){

           entrada=new DataInputStream(in);
        try {
            
           
            String a =entrada.readUTF();
            Chat.jTextAreaChat.append("\n"+a);
        } catch (IOException ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }
           

       }
}

Classe servidor:

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.*;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;


public class Servidor {

    private ServerSocket socketServidor;
    private Socket       socketCliente;
    private DataOutputStream saida;
    private DataInputStream  entrada;
    private final int porta=1234;
    private List<Socket> clientes;

    public Servidor(){

        //super();
        
        clientes = new ArrayList<Socket>();

    }

    public void init(){
        try {
                socketServidor=new ServerSocket(porta);
                while(true){
                socketCliente = socketServidor.accept();
                System.out.println("Nova conexão com o cliente " + formataCliente(socketCliente));

                clientes.add(socketCliente);

                RecebedorMsgServidor recebedor = new RecebedorMsgServidor(socketCliente.getInputStream(), this);
                recebedor.start();
                }
        } catch (IOException ex) {

            JOptionPane.showMessageDialog(null, ex.getMessage());
        }
       
        
        
    }

    public void distribuiMensagem(String msg) {
        try {
                for (Socket cliente : clientes) {

                        saida=new DataOutputStream(socketCliente.getOutputStream());
                        saida.writeUTF(formataCliente(cliente) + ": " + msg);
                        
                }
        } catch (IOException e) {
                JOptionPane.showMessageDialog(null,e.getMessage());
        }
    }

    private String formataCliente(Socket cliente) {

        return cliente.getInetAddress().getHostAddress() + ":" + cliente.getPort();
    }
    public static void main(String arges[]){

        Servidor c=new Servidor();
        c.init();
        
    }
}

Classe thread Servidor

public class RecebedorMsgServidor extends Thread {
    
    private DataInputStream entrada;
    private InputStream in;
    private Servidor serv;
    public RecebedorMsgServidor(InputStream in,Servidor serv) {

       this.in=in;
       this.serv=serv;
    }

    @Override
public void run(){

    entrada=new DataInputStream(in);
        try {
            String a = entrada.readUTF();
            
            serv.distribuiMensagem(a);
            
        } catch (IOException ex) {
           JOptionPane.showMessageDialog(null, ex.getMessage());
        }

}

}

Classe Chat Interface

[code]
public class Chat extends javax.swing.JFrame {

public static Cliente cliente;

public Chat() {
    initComponents();
    cliente=new Cliente("localhost",1234);
    //cliente.init();
}


@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {

    jScrollPane1 = new javax.swing.JScrollPane();
    jTextAreaChat = new javax.swing.JTextArea();
    jScrollPane2 = new javax.swing.JScrollPane();
    jListUsuarios = new javax.swing.JList();
    jButtonEnviar = new javax.swing.JButton();
    jTtexto = new javax.swing.JTextField();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    jScrollPane1.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
    jScrollPane1.setViewportBorder(javax.swing.BorderFactory.createTitledBorder(null, "Chat do Mingois", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 12))); // NOI18N

    jTextAreaChat.setColumns(20);
    jTextAreaChat.setRows(5);
    jScrollPane1.setViewportView(jTextAreaChat);

    jScrollPane2.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Usuários", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 12))); // NOI18N

    jScrollPane2.setViewportView(jListUsuarios);

    jButtonEnviar.setText("Enviar");
    jButtonEnviar.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButtonEnviarActionPerformed(evt);
        }
    });

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                .addComponent(jTtexto, javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 337, Short.MAX_VALUE))
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(jButtonEnviar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 63, Short.MAX_VALUE))
            .addContainerGap())
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                .addComponent(jScrollPane2, javax.swing.GroupLayout.Alignment.TRAILING)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 197, Short.MAX_VALUE))
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(jTtexto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(jButtonEnviar))
            .addContainerGap(63, Short.MAX_VALUE))
    );

    pack();
}// </editor-fold>                        

//BUTÂO
private void jButtonEnviarActionPerformed(java.awt.event.ActionEvent evt) {

    //cliente=new Cliente("localhost",1234);
    cliente.init();
    cliente.enviaMensagens(jTtexto.getText());
    
    
}                                             


public static void main(String args[]) {


    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            
            new Chat().setVisible(true);
        }
    });
}[/code]