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]
---------------------------------------------------------------------