Tema: Chat en java
Ver Mensaje Individual
  #2 (permalink)  
Antiguo 07/05/2011, 21:54
endgel
 
Fecha de Ingreso: diciembre-2010
Mensajes: 26
Antigüedad: 14 años
Puntos: 2
Respuesta: Chat en java

aca esta un ejemplo para que te guies, este es un chat entre 2 pc via lan, configuras las ip de cada una entre cliente y servidor y listo ... quizas te ayude en algo.. saludos


Código Javascript:
Ver original
  1. // Cliente que lee y muestra la informaci�n que le env�a un Servidor.
  2. import java.io.*;
  3. import java.net.*;
  4. import java.awt.*;
  5. import java.awt.event.*;
  6. import javax.swing.*;
  7.  
  8. public class Cliente extends JFrame {
  9.    private JTextField campoIntroducir;
  10.    private JTextArea areaPantalla;
  11.    private ObjectOutputStream salida;
  12.    private ObjectInputStream entrada;
  13.    private String mensaje = "";
  14.    private String servidorChat;
  15.    private Socket cliente;
  16.  
  17.    // inicializar servidorChat y configurar GUI
  18.    public Cliente( String host )
  19.    {
  20.       super( "Cliente" );
  21.  
  22.       servidorChat = host; // establecer el servidor al que se va a conectar este cliente
  23.  
  24.       Container contenedor = getContentPane();
  25.  
  26.       // crear campoIntroducir y registrar componente de escucha
  27.       campoIntroducir = new JTextField();
  28.       campoIntroducir.setEditable( false );
  29.       campoIntroducir.addActionListener(
  30.          new ActionListener() {
  31.  
  32.             // enviar mensaje al servidor
  33.             public void actionPerformed( ActionEvent evento )
  34.             {
  35.                enviarDatos( evento.getActionCommand() );
  36.                campoIntroducir.setText( "" );
  37.             }
  38.          }  
  39.       );
  40.  
  41.       contenedor.add( campoIntroducir, BorderLayout.NORTH );
  42.  
  43.       // crear areaPantalla
  44.       areaPantalla = new JTextArea();
  45.       contenedor.add( new JScrollPane( areaPantalla ),
  46.          BorderLayout.CENTER );
  47.  
  48.       setSize( 300, 150 );
  49.       setVisible( true );
  50.  
  51.    } // fin del constructor de Cliente
  52.  
  53.    // conectarse al servidor y procesar mensajes del servidor
  54.    private void ejecutarCliente()
  55.    {
  56.       // conectarse al servidor, obtener flujos, procesar la conexi�n
  57.       try {
  58.          conectarAServidor(); // Paso 1: crear un socket para realizar la conexi�n
  59.          obtenerFlujos();      // Paso 2: obtener los flujos de entrada y salida
  60.          procesarConexion(); // Paso 3: procesar la conexi�n
  61.       }
  62.  
  63.       // el servidor cerr� la conexi�n
  64.       catch ( EOFException excepcionEOF ) {
  65.          System.err.println( "El cliente termino la conexi�n" );
  66.       }
  67.  
  68.       // procesar los problemas que pueden ocurrir al comunicarse con el servidor
  69.       catch ( IOException excepcionES ) {
  70.          excepcionES.printStackTrace();
  71.       }
  72.  
  73.       finally {
  74.          cerrarConexion(); // Paso 4: cerrar la conexi�n
  75.       }
  76.  
  77.    } // fin del m�todo ejecutarCliente
  78.  
  79.    // conectarse al servidor
  80.    private void conectarAServidor() throws IOException
  81.    {      
  82.       mostrarMensaje( "Intentando realizar conexi�n\n" );
  83.  
  84.       // crear Socket para realizar la conexi�n con el servidor
  85.       cliente = new Socket( InetAddress.getByName( servidorChat ), 12345 );
  86.  
  87.       // mostrar la informaci�n de la conexi�n
  88.       mostrarMensaje( "Conectado a: " +
  89.          cliente.getInetAddress().getHostName() );
  90.    }
  91.  
  92.    // obtener flujos para enviar y recibir datos
  93.    private void obtenerFlujos() throws IOException
  94.    {
  95.       // establecer flujo de salida para los objetos
  96.       salida = new ObjectOutputStream( cliente.getOutputStream() );      
  97.       salida.flush(); // vac�ar b�fer de salida para enviar informaci�n de encabezado
  98.  
  99.       // establecer flujo de entrada para los objetos
  100.       entrada = new ObjectInputStream( cliente.getInputStream() );
  101.  
  102.       mostrarMensaje( "\nSe recibieron los flujos de E/S\n" );
  103.    }
  104.  
  105.    // procesar la conexi�n con el servidor
  106.    private void procesarConexion() throws IOException
  107.    {
  108.       // habilitar campoIntroducir para que el usuario del cliente pueda enviar mensajes
  109.       establecerCampoTextoEditable( true );
  110.  
  111.       do { // procesar mensajes enviados del servidor
  112.  
  113.          // leer mensaje y mostrarlo en pantalla
  114.          try {
  115.             mensaje = ( String ) entrada.readObject();
  116.             mostrarMensaje( "\n" + mensaje );
  117.          }
  118.  
  119.          // atrapar los problemas que pueden ocurrir al leer del servidor
  120.          catch ( ClassNotFoundException excepcionClaseNoEncontrada ) {
  121.             mostrarMensaje( "\nSe recibi� un objeto de tipo desconocido" );
  122.          }
  123.  
  124.       } while ( !mensaje.equals( "SERVIDOR>>> TERMINAR" ) );
  125.  
  126.    } // fin del m�todo procesarConexion
  127.  
  128.    // cerrar flujos y socket
  129.    private void cerrarConexion()
  130.    {
  131.       mostrarMensaje( "\nCerrando conexi�n" );
  132.       establecerCampoTextoEditable( false ); // deshabilitar campoIntroducir
  133.  
  134.       try {
  135.          salida.close();
  136.          entrada.close();
  137.          cliente.close();
  138.       }
  139.       catch( IOException excepcionES ) {
  140.          excepcionES.printStackTrace();
  141.       }
  142.    }
  143.  
  144.    // enviar mensaje al servidor
  145.    private void enviarDatos( String mensaje )
  146.    {
  147.       // enviar objeto al servidor
  148.       try {
  149.          salida.writeObject( "CLIENTE>>> " + mensaje );
  150.          salida.flush();
  151.          mostrarMensaje( "\nCLIENTE>>> " + mensaje );
  152.       }
  153.  
  154.       // procesar los problemas que pueden ocurrir al enviar el objeto
  155.       catch ( IOException excepcionES ) {
  156.          areaPantalla.append( "\nError al escribir el objeto" );
  157.       }
  158.    }
  159.  
  160.    // m�todo utilitario que es llamado desde otros subprocesos para manipular a
  161.    // areaPantalla en el subproceso despachador de eventos
  162.    private void mostrarMensaje( final String mensajeAMostrar )
  163.    {
  164.       // mostrar mensaje del subproceso de ejecuci�n de la GUI
  165.       SwingUtilities.invokeLater(
  166.          new Runnable() {  // clase interna para asegurar que la GUI se actualice apropiadamente
  167.  
  168.             public void run() // actualiza areaPantalla
  169.             {
  170.                areaPantalla.append( mensajeAMostrar );
  171.                areaPantalla.setCaretPosition(
  172.                   areaPantalla.getText().length() );
  173.             }
  174.  
  175.          }  // fin de la clase interna
  176.  
  177.       ); // fin de la llamada a SwingUtilities.invokeLater
  178.    }
  179.  
  180.    // m�todo utilitario que es llamado desde otros subprocesos para manipular a
  181.    // campoIntroducir en el subproceso despachador de eventos
  182.    private void establecerCampoTextoEditable( final boolean editable )
  183.    {
  184.       // mostrar mensaje del subproceso de ejecuci�n de la GUI
  185.       SwingUtilities.invokeLater(
  186.          new Runnable() {  // clase interna para asegurar que la GUI se actualice apropiadamente
  187.  
  188.             public void run()  // establece la capacidad de modificar campoIntroducir
  189.             {
  190.                campoIntroducir.setEditable( editable );
  191.             }
  192.  
  193.          }  // fin de la clase interna
  194.  
  195.       ); // fin de la llamada a SwingUtilities.invokeLater
  196.    }
  197.  
  198.    public static void main( String args[] )
  199.    {
  200.       Cliente aplicacion;
  201.  
  202.       if ( args.length == 0 )
  203.          aplicacion = new Cliente( "192.200.101.131" );
  204.       else
  205.          aplicacion = new Cliente( args[ 0 ] );
  206.  
  207.       aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
  208.       aplicacion.ejecutarCliente();
  209.    }
  210.  
  211. } // fin de la clase Cliente