Junção: Chat com XML

2 respostas
P

Olá pessoal, preciso de uma ajuda, como sou “noob” em java, gostaria de saber como posso mesclar o codigo de um chat para intranet com um leitor xml, explicando melhor: gostaria que um unico programa lê-se o arquivo xml e o mostre linha a linha pra cada “enter” pressionado dentro do chat. e esse chat que eu tenho ele nao possibilita mais de um cliente por vez, apenas um cliente e o servidor, e não sei fazer isso também, se dessem pra vocês me ajudarem em algum dos itens citados ou em todos rsrsrs, agradeceria muito…OBRIGADO e segue os códigos:

CHAT - CLIENTE

import java.io.EOFException;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.net.InetAddress;

import java.net.Socket;

import java.awt.BorderLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JFrame;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

import javax.swing.JTextField;

import javax.swing.SwingUtilities;

public class Client extends JFrame
{
private JTextField enterField; //insere informações fornecidas pelo usuário
private JTextArea displayArea; //exibe informações para o usuário
private ObjectOutputStream output; //gera fluxo de saída para o servidor
private ObjectInputStream input; //gera fluxo de entrada a partir do servidor
private String message = “”; //mensagem do servidor
private String chatServer; //servidor de host para esse aplicativo
private Socket client; //socket para comunicação com o servidor

//inicializa chatServer e configura a GUI

public Client( String host )

{

super( Client );
chatServer = host; //configura o servidor ao qual esse cliente se conecta

 enterField = new JTextField(); //cria enterField
 enterField.setEditable( false );
 enterField.addActionListener(
    new ActionListener()
    {
       //envia mensagem ao servidor
       public void actionPerformed( ActionEvent event )
       {
          sendData( event.getActionCommand() );
          enterField.setText( "" );
       } //fim do método actionPerformed
    } //fim da classe interna anônima
 ); //fim da chamada para addActionListener

 //add( enterField, BorderLayout.NORTH );
 getContentPane().add( enterField, BorderLayout.NORTH );

 displayArea = new JTextArea(); //cria displayArea
 getContentPane().add( new JScrollPane( displayArea ), BorderLayout.CENTER );

 setSize( 300, 150 ); //configura o tamanho da janela
 setVisible( true ); //mostra a janela

} //fim do construtor Client

//conecta-se ao servidor e processa as mensagens a partir do servidor

public void runClient()

{

try //conecta-se ao servidor, obtém fluxos, processa a conexão

{

connectToServer(); //cria um Socket para fazer a conexão

getStreams(); //obtém os fluxos de entrada e saída

processConnection(); //processa a conexão

} //fim do try

catch (EOFException eofException)

{

displayMessage( \nClient terminated connection );

} //fim do catch

catch (IOException ioException)

{

ioException.printStackTrace();

} //fim do catch

finally

{

closeConnection(); //fecha a conexão

} //fim do finally

} //fim do método runClient
//conecta-se ao servidor

private void connectToServer() throws IOException

{

displayMessage( Attempting connection\n );
//cria Socket para fazer a conexão ao servidor
 client = new Socket( InetAddress.getByName( chatServer ), 12345 );

 //exibe informações sobre a conexão
 displayMessage( "Connected to: " +
    client.getInetAddress().getHostName() );

} //fim do método connectToServer

//obtém fluxos para enviar e receber dados

private void getStreams() throws IOException

{

//configura o fluxo de saída para objetos

output = new ObjectOutputStream( client.getOutputStream() );

output.flush(); //esvazia buffer de saída para enviar as informações de cabeçalho
//configura o fluxo de entrada para objetos
 input = new ObjectInputStream( client.getInputStream() );

 displayMessage( "\nGot I/O streams\n" );

} //fim do método getStreams

//processa a conexão com o servidor

private void processConnection() throws IOException

{

//ativa enterField de modo que o usuário cliente possa enviar mensagens

setTextFieldEditable( true );
do //processa as mensagens enviadas do servidor
 {
    try //lê e exibe a mensagem
    {
       message = ( String ) input.readObject(); //lê uma nova mensagem
       displayMessage( "\n" + message ); //exibe a mensagem
    } //fim do try
    catch (ClassNotFoundException classNotFoundException )
    {
       displayMessage( "\nUnknown object type received" );
    } //fim do catch

 } while ( !message.equals( "SERVER>>> TERMINATE" ) );

} //fim do método processConnection

//fecha os fluxos e o socket

private void closeConnection()

{

displayMessage( \nClosing connection );

setTextFieldEditable( false ); //desativa enterField
try
 {
    output.close(); //fecha o fluxo de saída
    input.close(); //fecha o fluxo de entrada
    client.close(); //fecha o socket
 } //fim do try
 catch ( IOException ioException )
 {
    ioException.printStackTrace();
 } //fim do catch

} //fim do método closeConnection

//envia mensagem ao servidor

private void sendData( String message )

{

try //envia o objeto ao servidor

{

output.writeObject( "CLIENT>>> " + message );

output.flush(); //esvazia os dados para saída

displayMessage( "\nCLIENT>>> " + message );

} //fim do try

catch ( IOException ioException )

{

displayArea.append( \nError writing object );

} //fim do catch

} //fim do método sendData
//manipula a displayArea na thread de despacho de eventos

private void displayMessage( final String messageToDisplay )

{

SwingUtilities.invokeLater(

new Runnable()

{

public void run() //atualiza a displayArea

{

displayArea.append( messageToDisplay ); //acrescenta a mensagem

} //fim do método run

} //fim da classe interna anônima

); //fim da chamada para SwingUtilities.invokeLater

} //fim do método displayMessage
//manipula o enterField na thread de despacho de eventos

private void setTextFieldEditable( final boolean editable )

{

SwingUtilities.invokeLater(

new Runnable()

{

public void run() //configura a editabilidade do enterField

{

enterField.setEditable( editable );

} //fim do método run

} //fim da classe interna anônima

); //fim da chamada para SwingUtilities.invokeLater

} //fim do método setTextFieldEditable

} //fim da classe Client

CHAT - SERVIDOR

import java.io.EOFException;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.net.ServerSocket;

import java.net.Socket;

import java.awt.BorderLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JFrame;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

import javax.swing.JTextField;

import javax.swing.SwingUtilities;

public class Server extends JFrame
{
private JTextField enterField; //insere a mensagem do usuário
private JTextArea displayArea; //exibe informações para o usuário
private ObjectOutputStream output; //gera fluxo de saída para o cliente
private ObjectInputStream input; //gera fluxo de entrada a partir do cliente
private ServerSocket server; //socket de servidor
private Socket connection; //conexão com o cliente
private int counter = 1; //contador do número de conexões

//configura a GUI

public Server()

{

super( Server );
enterField = new JTextField(); //cria enterfield
  enterField.setEditable( false );
  enterField.addActionListener(
     new ActionListener()
     {
        //envia a mensagem ao cliente
        public void actionPerformed( ActionEvent event )
        {
           sendData( event.getActionCommand() );
           enterField.setText( "" );
        } //fim do método actionPerformed
     } //fim da classe interna anônima
  ); //fim da chamada para addActionListener

  //add( enterField, BorderLayout.NORTH );
  getContentPane().add( enterField, BorderLayout.NORTH );

  displayArea = new JTextArea(); //cria displayArea
  getContentPane().add( new JScrollPane( displayArea ), BorderLayout.CENTER );

  setSize( 300, 150 ); //configura o tamanho da janela
  setVisible( true ); //mostra a janela

} //fim do construtor Server

//configura e executa o servidor

public void runServer()

{

try //configura o servidor para receber conexões; processa as conexões

{

server = new ServerSocket( 12345, 100 ); //cria ServerSocket
while ( true )
     {
        try
        {
           waitForConnection(); //espera uma conexão
           getStreams(); //obtém fluxos de entrada e saída
           processConnection(); //processa a conexão
        } //fim do try
        catch (EOFException eofException )
        {
           displayMessage( "\n Server terminated connection" );
        } //fim do catch
        finally
        {
           closeConnection(); //fecha a conexão
           counter++;
        } //fim do finally
     } //fim do while
  } //fim do try
  catch (IOException ioException )
  {
     ioException.printStackTrace();
  } //fim do catch

} // fim do método runServer

//espera que a conexão chegue e então exibe informações sobre a conexão

private void waitForConnection() throws IOException

{

displayMessage( Waiting for connection\n );

connection = server.accept(); //permite que o servidor aceite a conexão

displayMessage( " Connection " + counter + " received from: " +

connection.getInetAddress().getHostName() );

} //fim do método waitForConnection
//obtém fluxos para evitar a receber dados

private void getStreams() throws IOException

{

//configura o fluxo de saída para objetos

output = new ObjectOutputStream( connection.getOutputStream() );

output.flush(); //esvazia buffer de saída para enviar as informações de cabeçalho
//configura o fluxo de entrada para objetos
  input = new ObjectInputStream( connection.getInputStream() );

  displayMessage( "\nGot I/O streams\n" );

} //fim do método getStreams

//processa a conexão com o cliente

private void processConnection() throws IOException

{

String message = Connection successful;

sendData( message ); //envia uma mensagem de conexão bem-sucedida
//ativa enterField de modo que usuário doservidor possa enviar mensagens
  setTextFieldEditable( true );

  do //processa as mensagens enviadas pelo cliente
  {
     try //lê e exibe a mensagem
     {
        message = ( String ) input.readObject(); //lê uma nova mensagem
        displayMessage( "\n" + message ); //exibe a mensagem
     } //fim do try
     catch ( ClassNotFoundException classNotFoundException )
     {
        displayMessage( "\nUnknown object type received" );
     } //fim do catch

  } while ( !message.equals( "CLIENT>>> TERMINATE" ) );

} //fim do método processConnection

//fecha os fluxos e o socket

private void closeConnection()

{

displayMessage( "\nTerminating connection\n " );

setTextFieldEditable( false ); //desativa enterField
try
  {
     output.close(); //fecha o fluxo de saída
     input.close(); //fecha o fluxo de entrada
     connection.close(); //fecha o socket
  } //fim do try
  catch ( IOException ioException )
  {
     ioException.printStackTrace();
  } //fim do catch

} //fim do método closeConnection

//envia a mensagem ao cliente

private void sendData( String message )

{

try //envia o objeto ao cliente

{

output.writeObject( "SERVER>>> " + message );

output.flush(); //esvazia a saída para o cliente

displayMessage( "\nSERVER>>> " + message );

} //fim do try

catch ( IOException ioException )

{

displayArea.append( \nError writting object );

} //fim do catch

} //fim do método sendData
//manipula a displayArea na thread de despacho de eventos

private void displayMessage( final String messageToDisplay )

{

SwingUtilities.invokeLater(

new Runnable()

{

public void run() //atualiza a displayArea

{

displayArea.append( messageToDisplay ); //acrescenta a mensagem

} //fim do método run

} //fim da classe interna anônima

); //fim da chamada para SwingUtilities.invokeLater

} //fim do método displayMessage
//manipula o enterField na thread de despacho de eventos

private void setTextFieldEditable( final boolean editable )

{

SwingUtilities.invokeLater(

new Runnable()

{

public void run() //configura a editabilidade do enterField

{

enterField.setEditable( editable );

} //fim do método run

} //fim da classe interna anônima

); //fim da chamada para SwingUtilities.invokeLater

} //fim do método setTextFieldEditable

} //fim da classe Server

XML

final class Sink extends org.xml.sax.helpers.DefaultHandler implements org.xml.sax.ContentHandler

{

final private static void print   ( final String context, final String text )

{

System.out.println( context + : “” + text + “”. );

}
final public void startElement   ( final String namespace, final String localname, final String type, final org.xml.sax.Attributes attributes )   throws org.xml.sax.SAXException
{
    print( "startElement", type );
}

final public void endElement   ( final String namespace, final String localname,      final String type )   throws org.xml.sax.SAXException
{
    print( "endElement  ", type );
}

final public void characters   ( final char[] ch, final int start, final int len )
{
    final String text = new String( ch, start, len );
    final String text1 = text.trim();
    if( text1.length() > 0 )
        print( "characters  ", text1 );
}

}

final class XML

{ /** create a new XML reader */

final public static org.xml.sax.XMLReader makeXMLReader()    throws Exception

{

final javax.xml.parsers.SAXParserFactory saxParserFactory   =      javax.xml.parsers.SAXParserFactory.newInstance();     final javax.xml.parsers.SAXParser        saxParser = saxParserFactory.newSAXParser();     final org.xml.sax.XMLReader              parser    = saxParser.getXMLReader();     return parser; }}
public class Teste {

public static void main( final String [] args )    throws Exception   {

org.xml.sax.XMLReader reader = XML.makeXMLReader();

reader.setContentHandler( new Sink() );

reader.parse( new org.xml.sax.InputSource( roteiro.xml ));

}

}

Se postei errado alguma coisa me avisem por favor…OBRIGADO ^^

2 Respostas

P

I NEED SOMEBODY HELPPPP

P

UP

Criado 13 de maio de 2007
Ultima resposta 16 de mai. de 2007
Respostas 2
Participantes 1