Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. package servidor;
  2.  
  3. import java.awt.BorderLayout;
  4. import java.awt.Color;
  5. import java.awt.event.ActionEvent;
  6. import java.awt.event.ActionListener;
  7. import java.io.IOException;
  8. import java.net.InetAddress;
  9. import java.net.ServerSocket;
  10. import java.net.Socket;
  11. import java.util.concurrent.ExecutorService;
  12. import java.util.concurrent.Executors;
  13. import java.util.logging.Level;
  14. import java.util.logging.Logger;
  15. import javax.swing.*;
  16.  
  17. /**Clase que se encarga de correr los threads de enviar y recibir texto
  18.  * y de crear la interfaz grafica.
  19.  *
  20.  * @author Rafa
  21.  */
  22. public class PrincipalChat extends JFrame{
  23.     public JTextField campoTexto; //Para mostrar mensajes de los usuarios
  24.     public JTextArea areaTexto; //Para ingresar mensaje a enviar
  25.     private static ServerSocket servidor; //
  26.     private static Socket conexion; //Socket para conectarse con el cliente
  27.     private static String ip = "127.0.0.1"; //ip a la cual se conecta
  28.    
  29.     public static PrincipalChat main;
  30.    
  31.     public PrincipalChat(){
  32.         super("Servidor"); //Establece titulo al Frame
  33.        
  34.         campoTexto = new JTextField(); //crea el campo para texto
  35.         campoTexto.setEditable(false); //No permite que sea editable el campo de texto
  36.         add(campoTexto, BorderLayout.NORTH); //Coloca el campo de texto en la parte superior
  37.        
  38.         areaTexto = new JTextArea(); //Crear displayArea
  39.         areaTexto.setEditable(false);
  40.         add(new JScrollPane(areaTexto), BorderLayout.CENTER);
  41.         areaTexto.setBackground(Color.orange); //Pone de color cyan al areaTexto
  42.         areaTexto.setForeground(Color.BLACK); //pinta azul la letra en el areaTexto
  43.         campoTexto.setForeground(Color.BLACK); //pinta toja la letra del mensaje a enviar
  44.        
  45.        
  46.         //Crea menu Archivo y submenu Salir, ademas agrega el submenu al menu
  47.         JMenu menuArchivo = new JMenu("Archivo");
  48.         JMenuItem salir = new JMenuItem("Salir");
  49.         menuArchivo.add(salir); //Agrega el submenu Salir al menu menuArchivo
  50.        
  51.         JMenuBar barra = new JMenuBar(); //Crea la barra de menus
  52.         setJMenuBar(barra); //Agrega barra de menus a la aplicacion
  53.         barra.add(menuArchivo); //agrega menuArchivo a la barra de menus
  54.        
  55.         //Accion que se realiza cuando se presiona el submenu Salir
  56.         salir.addActionListener(new ActionListener() { //clase interna anonima
  57.                 public void actionPerformed(ActionEvent e) {
  58.                     System.exit(0); //Sale de la aplicacion
  59.                 }
  60.         });
  61.        
  62.         setSize(300, 320); //Establecer tamano a ventana
  63.         setVisible(true); //Pone visible la ventana
  64.     }
  65.    
  66.     //Para mostrar texto en displayArea
  67.     public void mostrarMensaje(String mensaje) {
  68.         areaTexto.append(mensaje + "\n");
  69.     }
  70.     public void habilitarTexto(boolean editable) {
  71.         campoTexto.setEditable(editable);
  72.     }
  73.  
  74.      /**
  75.      * @param args the command line arguments
  76.      */
  77.     public static void main(String[] args) {
  78.         PrincipalChat main = new PrincipalChat(); //Instanciacion de la clase Principalchat
  79.         main.setLocationRelativeTo(null);   //Centrar el JFrame
  80.         main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //habilita cerrar la ventana
  81.         ExecutorService executor = Executors.newCachedThreadPool(); //Para correr los threads
  82.  
  83.         try {
  84.             //main.mostrarMensaje("No se encuentra Servidor");
  85.             servidor = new ServerSocket(11111, 100);
  86.             main.mostrarMensaje("Esperando Cliente ...");
  87.  
  88.             //Bucle infinito para esperar conexiones de los clientes
  89.             while (true){
  90.                 try {
  91.                     conexion = servidor.accept(); //Permite al servidor aceptar conexiones        
  92.  
  93.                     //main.mostrarMensaje("Conexion Establecida");
  94.                     main.mostrarMensaje("Conectado a : " + conexion.getInetAddress().getHostName());
  95.  
  96.                     main.habilitarTexto(true); //permite escribir texto para enviar
  97.  
  98.                     //Ejecucion de los threads
  99.                     executor.execute(new Recibe(conexion, main)); //client
  100.                     executor.execute(new Envia(conexion, main));
  101.                 } catch (IOException ex) {
  102.                     Logger.getLogger(PrincipalChat.class.getName()).log(Level.SEVERE, null, ex);
  103.                 }
  104.             }
  105.         } catch (IOException ex) {
  106.             Logger.getLogger(PrincipalChat.class.getName()).log(Level.SEVERE, null, ex);
  107.         } //Fin del catch
  108.         finally {
  109.         }
  110.         executor.shutdown();
  111.     }
  112. }