Oi para todos,

 Bem a algum tempo mandei um e-mail para lista perguntando como fazer um
chat. Dai achei um exemplo numa das edições da revista PCMaster. Só que
neste exemplo a conexão só pode ser feita entre dois computadores.
 E o que preciso é de um chat em que eu possa fazer várias conexões.
Assim, se alguém souber alterar este código para que funcione desta
forma por favor me ajude.

   O código segue abaixo:

import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;

public  class Chat extends Frame implements ActionListener{

 private TextArea output;
 private Button conectar, enviar,aguardar;
 private TextField servidor, usuario,mensagem;
 private Panel texto, campos, botoes, msg, central;
 private ServerSocket ServidorSocket;
 private Socket ClienteSocket;
 private PrintStream Saida;
 private DataInputStream Entrada;

 public Chat(){

  super("Java Chat Meu");//titulo da janela
  setSize(450,490);
   // setBackground(new Color(red));
   texto= new Panel();
   msg= new Panel();
   central= new Panel();
   campos= new Panel();
   botoes= new Panel();
   output= new TextArea(24,55);
   texto.add(output);//insere (TextArea) output no painel de nome texto
   add(texto,BorderLayout.NORTH);//formatacao da area de saida
   conectar= new Button("Conectar");//instancia o botao
   enviar= new Button("Enviar");
   aguardar= new Button("Aguardar");
   conectar.addActionListener(this);//ativando o actionlistener
   enviar.addActionListener(this);
   aguardar.addActionListener(this);
   botoes.add(conectar);//insercao dos botoes no panel
   botoes.add(enviar);
   botoes.add(aguardar);
    botoes.setLayout(new GridLayout(1,1));//setando o layout do painel
botoes
    add(botoes,BorderLayout.SOUTH);
    central.setLayout(new GridLayout(2,1));
    add(central,BorderLayout.CENTER);
    msg.setLayout(new GridLayout(1,1));
    central.add(msg,BorderLayout.NORTH);
    campos.setLayout(new GridLayout(1,4));
    central.add(campos,BorderLayout.SOUTH);

    usuario= new TextField(20);
    servidor= new TextField(20);
    mensagem= new TextField(60);
    campos.add(new Label("Usuário"));
    campos.add(servidor);
    campos.add(new Label("Apelido"));
    campos.add(usuario);
    msg.add(new Label("Mensagem"));
    msg.add(mensagem);
    setVisible(true);//interface grafica visivel
 }//fim Chat

    private void readText(){

     String buf;//string com buffer do texto recebido
     int teste;

     try{

      teste=Entrada.available();
      while(teste!=0){

       buf=new String(Entrada.readLine()+"\n");
       output.appendText(buf);//coloca o texto na area de saida
       teste=Entrada.available();
      }

     }
     catch(IOException e){//trata o erro

       output.appendText(e.toString()+"\n");
       output.appendText(e.getMessage()+"\n");
       return;
      }
    }//fim readText

    public boolean handleEvent(Event e){//tratamento do evento de
fechamento da janela

     if(e.id==Event.WINDOW_DESTROY)
      System.exit(0);
     return super.handleEvent(e);
    }

    //funcao que trata os eventos dos botoes
    public void actionPerformed (ActionEvent e){

     if(e.getSource()==conectar)
      conexao(); //chama a funcao correspondente
     if(e.getSource()==enviar)
      envio(); //chama a funcao correspondente
     if(e.getSource()==aguardar)
      aguardando(); //chama a funcao correspondente
    }

    public void aguardando(){

     try{
      ServidorSocket= new ServerSocket(3000);//instancia o socket
servidor
      ClienteSocket= ServidorSocket.accept();//coloca o socket para
escutar a porta
      Entrada= new DataInputStream(ClienteSocket.getInputStream());
      Saida= new PrintStream(ClienteSocket.getOutputStream());
     }
     catch(Exception e){

      output.appendText(e.getMessage()+"\n");
      return;
      }
    }

    public void envio(){

     try{
      output.appendText(usuario.getText()+">"+mensagem.getText()+"\n");
      Saida.println(usuario.getText()+">"+mensagem.getText());
     }
     catch (Exception e ){
      output.appendText(e.toString()+"\n");
      output.appendText(e.getMessage()+"\n");
      return;
     }
    }

    public void conexao(){

     try{
      ClienteSocket= new Socket(servidor.getText(),3000);
       Entrada=new DataInputStream(ClienteSocket.getInputStream());
       Saida= new PrintStream(ClienteSocket.getOutputStream());
     }
     catch (Exception e ){
      output.appendText(e.toString()+"\n");
      output.appendText(e.getMessage()+"\n");
      return;
     }
    }

    public static void main(String args[]){

     Chat fc= new Chat();
     while (true){
       if(fc.Entrada!=null)
        fc.readText();
     }
    }

}//fim classe

    --------------------------- LISTA SOUJAVA ---------------------------
    http://www.soujava.org.br  -  Sociedade de Usuários Java da Sucesu-SP
    [dúvidas mais comuns: http://www.soujava.org.br/faq.htm]
    [para sair da lista: http://www.soujava.org.br/forum/cadastrados.htm]
    ---------------------------------------------------------------------

Responder a