Logo Studenta

Aplicación para la gestión de empleados

¡Este material tiene más páginas!

Vista previa del material en texto

El protocolo de comunicación entre el cliente y el servidor es el siguiente:
Del cliente al servidor:
· El cliente envía un 1 para solicitar que el servidor valide en la BD los datos de autenticación.
· El cliente envía un 2 al servidor para realizar una primera consulta realizada por el usuario en la cual se cargará en otro formulario una lista con todos los nombre de empleados que cumplan los criterios de búsqueda seleccionados para que el usuario elija uno de ellos y ver así el detalle de su ficha.
· El cliente envía un 3 para que el servidor pida a la BD los nombres de departamentos existentes y cargarlos en el choice de applet cuando el cliente quiere dar un alta. De este modo, el cliente solo podrá elegir entre los departamentos ya existentes a la hora de crear un nuevo empleado
· El cliente envía un 4 cuando el usuario quiere dar de alta un nuevo empleado una vez rellenados todos sus campos.
· El cliente envía un 5 al servidor para que busque en la BD el registro correspondiente al departamento asociado al nuevo empelado que ha dado de alta el usuario.
· El cliente envía un 6 cuando el usuario ha seleccionado un empleado concreto en la lista y quiere ver el detalle de su condulta.
· El cliente envía un 7 al servidor cuando quiere cerrar la aplicación y de ese modo solicita la desconexión con el servidor matando el hilo.
La clase Hilo.class generada por el servidor evalua en un while true (hasta que se desconecte el cliente) mediante un switch el número que le mande el cliente para tratar de forma correcta su petición.
Del servidor al cliente:
· El Servidor envía un 1 al cliente cuando su solicitud ha sido procesada con éxito.
· El servidor envía un número distinto de 1 cuando se ha producido algún error en su solicitud.
De esta forma, el cliente siempre sabe si su petición al servidor ha sido o no satisfactoria.
						
GESTIÓN DE EMPLEADOS
La aplicación consiste en una herramienta a la que se tendrá acceso desde Internet o dentro de una red local orientada a business to business capaz de realizar búsquedas de la localización de empleados dentro de una empresa mostrando información relativa al cargo que ocupa en la empresa, así como su localización geográfica dentro la misma, es decir, la planta y el departamento en el que se encuentra.
También se podrá dar de alta nuevos empleados en la base de datos asignándole un código de empleado y su localización geográfica correspondiente.
Todo esto se realizará tras una previa identificación con usuario y password ya que sólo tendrán acceso a la aplicación los usuarios registrados.
El usuario dispondrá de diversas pantallas para realizar las búsquedas y ejecutar altas. Tras identificarse como usuario registrado, tendrá dos opciones: o bien puede dar de alta un nuevo empleado, o bien puede realizar una consulta por código de empleado ,por nombre de empleado, o por ambos campos juntos. De esta consulta pueden salir varios empleados que cumplan los criterios de búsqueda, por ello, todos los empleados resultantes de dicha búsqueda, apareceran en una lista para que el usuario seleccione pinchando en el que le interesa, mostrándose así los datos personales de dicho empleado.
Para realizar un alta, deberá rellenar los campos que se le solicitan y elegir ,de entre varios posibles, el departamento en el que desea ubicarlo.
El usuario podrá abandonar la aplicación en el momento que lo desee tan solo pulsando un botón.
FUENTES
Inicio.java
import java.awt.*;
import java.applet.Applet;
import java.awt.event.*;
import java.net.*;
import java.io.*;
public class Inicio extends Applet implements ActionListener{
//-----------------------------------VARIABLES GLOBALES-----------------------------------------
 Frame ventana;
 Panel panelSur, panelMedio, panelNorte, panelCentro;
 Button botonAceptar, botonSalir, botonBuscar, botonBuscarEmpleado, botonNuevoEmpleado, botonAlta, botonVerDatos;
 Panel panelA, panelAs, panelC, panelS, panelS2, panelBsur, panelBusqueda, panelNuevo, panelResultado, panelLista, panelLsur;
 CardLayout cambioPanelCentro = new CardLayout();
 CardLayout cambioPanelSur = new CardLayout();
 Label etiquetaLogin, etiquetaPass, etiquetaTitulo, etiquetaCodigo, etiquetaNombre, etiquetaCargo, etiquetaPlanta, etiquetaDepartamento, etiquetaCDepartamento, etiquetaLista, etiquetaTodos;
 TextField textoLogin, textoPass, textoCodigo, textoNombre, textoCargo, textoPlanta, textoDepartamento, textoCDepartamento;
 MenuBar barraMenu;
 Menu menuGestion, menuSalir;
 MenuItem opcionAlta, opcionConsulta, opcionSalir;
 Socket conexion = null;
 DataInputStream flujoEntradaFormato = null;
 DataOutputStream flujoSalidaDatos = null;
 Choice cajaCDepartamento;
 List listaEmpleados;
 int resultado;
 String[] choice;
 String[] datos;
 boolean conectado = false;
//------------------------------FIN DE VARIABLES GLOBALES----------------------------------------- 
 
 // CREAMOS UN OBJETO FRAME 
 public void init() {
 ventana = new Frame("Aplicacion Gestion de Empleados");
 this.metodoInicio();
 }
 
 // ----------------------------------CONSTRUIMOS LA VENTANA---------------------------------
 public void metodoInicio() {
 this.construirVentana();
 }
 
 public void construirVentana() {
 panelNorte = new Panel();
 panelCentro = new Panel();
 panelMedio = new Panel();
 panelSur = new Panel();
 this.crearComponentes();
 this.construirPanelNorte();
 this.construirPanelMedio();
 this.construirPanelSur();
 this.construirMenu();
 cambioPanelCentro.show( panelMedio, "id" );
 cambioPanelSur.show( panelSur, "log" );
 ventana.setLayout( new BorderLayout() );
 ventana.add(panelNorte, "North");
 ventana.add(panelMedio, "Center");
 ventana.add(panelSur, "South");
 ventana.setMenuBar(barraMenu);
 ventana.setSize(600,400);
 ventana.setVisible(true);
 ventana.setResizable(false); 
 }
 public void construirMenu() {
	barraMenu = new MenuBar();
	menuGestion = new Menu("Gestión");
	menuSalir = new Menu("Salir");
	opcionAlta = new MenuItem("Nuevo Empleado");
	opcionConsulta = new MenuItem("Buscar Empleado");
	opcionSalir = new MenuItem("Salir");
	menuGestion.add(opcionAlta);
	menuGestion.add(opcionConsulta);
	menuSalir.add(opcionSalir);
	barraMenu.add(menuGestion);
	barraMenu.add(menuSalir);
	
	opcionAlta.setEnabled(false);
	opcionConsulta.setEnabled(false);
	opcionAlta.addActionListener( this);
	opcionConsulta.addActionListener( this);
	opcionSalir.addActionListener( this);
 }
 public void construirPanelNorte() {
 
 etiquetaTitulo = new Label("GESTION DE EMPLEADOS");
 etiquetaTitulo.setFont ( new Font ("TimesRoman", Font.BOLD, 16) );
 etiquetaTitulo.setAlignment (Label.CENTER);
 panelNorte.setLayout( new FlowLayout() ); 
 panelNorte.add( etiquetaTitulo );	
 }
 
 public void construirPanelMedio() {
 	Label etiquetaArroba = new Label("@");
 	etiquetaArroba.setFont ( new Font ("Verdana", Font.BOLD, 72) );
 	etiquetaArroba.setAlignment (Label.CENTER);
 	
 panelC = new Panel();
 botonSalir = new Button("Salir");
 panelC.setLayout(new FlowLayout() );
 panelC.add( botonSalir );
 
 panelMedio.setLayout( cambioPanelCentro );
 panelCentro.setLayout( new BorderLayout() );
 panelCentro.setBackground(Color.yellow);
 
 panelCentro.add( etiquetaArroba, "Center"); 
 panelCentro.add( panelC, "South" );
 panelMedio.add( panelCentro, "id" );
 botonSalir.addActionListener( this);
 }
 public void construirPanelSur() {
 panelSur.setLayout( cambioPanelSur );
 panelS = new Panel();
 panelS.setLayout( new FlowLayout() );
 	
 etiquetaLogin = new Label("Login:");
 etiquetaPass = new Label("Password:");textoLogin = new TextField();
 textoPass = new TextField();
 textoLogin.setColumns(15);
 textoPass.setColumns(15);
 botonAceptar = new Button("Aceptar");
 panelS.add(etiquetaLogin);
 panelS.add(textoLogin);
 panelS.add(etiquetaPass);
 panelS.add(textoPass);
 panelS.add(botonAceptar);
 
 panelSur.add( panelS, "log" );
 botonAceptar.addActionListener( this);
 }
 public void construirPanelBusqueda() {
	panelBusqueda = new Panel();
	panelBusqueda.setLayout( new BorderLayout() );
	
	panelBsur = new Panel();
 botonBuscar = new Button("Buscar");
 panelBsur.setLayout(new FlowLayout() );
 panelBsur.add( botonBuscar );
	Panel panelB = new Panel();
	panelB.setLayout( new GridLayout(3,1) ); 
	Panel panelB1 = new Panel();
	panelB1.setLayout( new FlowLayout());
	Panel panelB2 = new Panel();	
	panelB2.setLayout( new FlowLayout());
	Panel panelBaux = new Panel();	
	panelBaux.setLayout( new FlowLayout());
	
	panelBaux.add( etiquetaTodos );	
	panelB1.add( etiquetaCodigo );
	panelB1.add( textoCodigo );
	panelB2.add( etiquetaNombre );
	panelB2.add( textoNombre );
	panelB.add( panelBaux );
	panelB.add( panelB1 );
	panelB.add( panelB2 );
	panelBusqueda.add( panelB, "Center" );
	panelBusqueda.add( panelBsur, "South" );	
	panelMedio.add( panelBusqueda, "buscar" );
	cambioPanelCentro.show( panelMedio, "buscar" );
	etiquetaTitulo.setText("BÚSQUEDA DE EMPLEADOS");
	etiquetaTitulo.setFont ( new Font ("TimesRoman", Font.BOLD, 16) );	
	etiquetaTitulo.setAlignment (Label.CENTER);
	botonBuscar.addActionListener( this);
 }
 public void construirPanelAlta() {
	panelA = new Panel();
	panelA.setLayout( new BorderLayout() );
	
	Panel panelAsur;
	panelAsur = new Panel();
 panelAsur.setLayout(new FlowLayout() );
	botonAlta = new Button("Dar de Alta");
 panelAsur.add( botonAlta );
	Panel panelA2 = new Panel();
	panelA2.setLayout( new GridLayout(5,1) ); 
	Panel panelA3 = new Panel();
	panelA3.setLayout( new FlowLayout());
	Panel panelA4 = new Panel();	
	panelA4.setLayout( new FlowLayout());
	Panel panelA5 = new Panel();	
	panelA5.setLayout( new FlowLayout());
	Panel panelA6 = new Panel();	
	panelA6.setLayout( new FlowLayout());
	Panel panelA8 = new Panel();	
	panelA8.setLayout( new FlowLayout());
	Panel panelAaux = new Panel();	
	panelAaux.setLayout( new FlowLayout());
		
	panelA3.add( etiquetaCodigo );
	panelA3.add( textoCodigo );
	panelA4.add( etiquetaNombre );
	panelA4.add( textoNombre );
	panelA5.add( etiquetaCargo );
	panelA5.add( textoCargo );
	panelA8.add( etiquetaCDepartamento );
	panelA8.add( cajaCDepartamento );
	panelA2.add( panelAaux );
	panelA2.add( panelA3 );
	panelA2.add( panelA4 );
	panelA2.add( panelA5 );
	panelA2.add( panelA8 );
	panelA.add( panelA2, "Center" );
	panelA.add( panelAsur, "South" );	
	panelMedio.add( panelA, "alta" );
	cambioPanelCentro.show( panelMedio, "alta" );
	etiquetaTitulo.setText("ALTA DE EMPLEADOS");	
	etiquetaTitulo.setFont ( new Font ("TimesRoman", Font.BOLD, 16) );	
	etiquetaTitulo.setAlignment (Label.CENTER);
	botonAlta.addActionListener( this);
 }
 public void construirPanelDatos() {
	panelA = new Panel();
	panelA.setLayout( new BorderLayout() );
	
	Panel panelAsur;
	panelAsur = new Panel();
 panelAsur.setLayout(new FlowLayout() );
	Panel panelA2 = new Panel();
	panelA2.setLayout( new GridLayout(7,1) ); 
	Panel panelA3 = new Panel();
	panelA3.setLayout( new FlowLayout());
	Panel panelA4 = new Panel();	
	panelA4.setLayout( new FlowLayout());
	Panel panelA5 = new Panel();	
	panelA5.setLayout( new FlowLayout());
	Panel panelA6 = new Panel();	
	panelA6.setLayout( new FlowLayout());
	Panel panelA7 = new Panel();	
	panelA7.setLayout( new FlowLayout());
	Panel panelA8 = new Panel();	
	panelA8.setLayout( new FlowLayout());
	Panel panelAaux = new Panel();	
	panelAaux.setLayout( new FlowLayout());
	
	panelA3.add( etiquetaCodigo );
	panelA3.add( textoCodigo );
	panelA4.add( etiquetaNombre );
	panelA4.add( textoNombre );
	panelA5.add( etiquetaCargo );
	panelA5.add( textoCargo );
	panelA6.add( etiquetaPlanta );
	panelA6.add( textoPlanta );
	panelA7.add( etiquetaDepartamento );
	panelA7.add( textoDepartamento );
	panelA8.add( etiquetaCDepartamento );
	panelA8.add( textoCDepartamento );
	panelA2.add( panelAaux );
	panelA2.add( panelA3 );
	panelA2.add( panelA4 );
	panelA2.add( panelA5 );
	panelA2.add( panelA6 );
	panelA2.add( panelA7 );
	panelA2.add( panelA8 );
	panelA.add( panelA2, "Center" );
	panelA.add( panelAsur, "South" );	
	panelMedio.add( panelA, "alta" );
	cambioPanelCentro.show( panelMedio, "alta" );
	etiquetaTitulo.setText("RESULTADO");	
	etiquetaTitulo.setFont ( new Font ("TimesRoman", Font.BOLD, 16) );	
	etiquetaTitulo.setAlignment (Label.CENTER);
	
 }
	public void construirPanelLista() {
	panelLista = new Panel();
	panelLista.setLayout( new BorderLayout() );
	
	panelLsur = new Panel();
 botonVerDatos = new Button("Ver Datos");
 panelLsur.setLayout(new FlowLayout() );
 panelLsur.add( botonVerDatos );
	Panel panelL = new Panel();
	panelL.setLayout( new GridLayout(2,1) ); 
	Panel panelL1 = new Panel();
	panelL1.setLayout( new FlowLayout());
	Panel panelLaux = new Panel();	
	panelLaux.setLayout( new FlowLayout());
	
	etiquetaLista = new Label("Seleccione un elemento de la lista");	
	panelL1.add( etiquetaLista );
	panelL1.add( listaEmpleados );
	panelL.add( panelLaux );
	panelL.add( panelL1 );
	panelLista.add( panelL, "Center" );
	panelLista.add( panelLsur, "South" );	
	panelMedio.add( panelLista, "listar" );
	cambioPanelCentro.show( panelMedio, "listar" );
	etiquetaTitulo.setText("RESULTADO CONSULTA");
	etiquetaTitulo.setFont ( new Font ("TimesRoman", Font.BOLD, 16) );	
	etiquetaTitulo.setAlignment (Label.CENTER);
	botonVerDatos.addActionListener(this);
	listaEmpleados.addActionListener(this);
 }
 public void construirMenuInferior() {
 
 panelS2 = new Panel();
 panelS2.setLayout( new FlowLayout() );
 	
 botonBuscarEmpleado = new Button("Buscar Empleado");
 botonNuevoEmpleado = new Button("Nuevo Empleado");
 
 panelS2.add(botonBuscarEmpleado);
 panelS2.add(botonNuevoEmpleado);
 panelS2.add(botonSalir);
 
 panelSur.add( panelS2, "normal" ); 
 cambioPanelSur.show( panelSur, "normal" );
 botonBuscarEmpleado.addActionListener( this );
 botonNuevoEmpleado.addActionListener( this );
 this.EvaluarBotones("resultado");	 
 } 	
//-----------------------------------------FIN DE CONSTRUIR LA VENTANA--------------------------
//------------------------EVALUAMOS LOS BOTONES PARA HABILITARLOS O DESHABILITARLOS-------------	
	public void EvaluarBotones(String tipo) {
	 if(tipo.equals("busqueda")){
	 	textoCodigo.setEditable(true);
 	textoNombre.setEditable(true);
 	textoCargo.setEditable(true);
 	textoPlanta.setEditable(true);
 	textoDepartamento.setEditable(true);
 	textoCDepartamento.setEditable(true);
 	
		botonBuscarEmpleado.setEnabled(false);
		botonNuevoEmpleado.setEnabled(true);
		opcionAlta.setEnabled(true);
		opcionConsulta.setEnabled(false);
 }else if(tipo.equals("alta")){
 	textoCodigo.setEditable(true);
 	textoNombre.setEditable(true);
 	textoCargo.setEditable(true);
 	textoPlanta.setEditable(true);
 	textoDepartamento.setEditable(true);
 	textoCDepartamento.setEditable(true);
 	
		botonNuevoEmpleado.setEnabled(false);
		botonBuscarEmpleado.setEnabled(true);
		opcionAlta.setEnabled(false);
		opcionConsulta.setEnabled(true);
 }else if(tipo.equals("resultado")){
 	textoCodigo.setEditable(false);
 	textoNombre.setEditable(false);
 	textoCargo.setEditable(false);
 	textoPlanta.setEditable(false);
 	textoDepartamento.setEditable(false);textoCDepartamento.setEditable(false);
 	
		botonNuevoEmpleado.setEnabled(true);
		botonBuscarEmpleado.setEnabled(true);
		opcionAlta.setEnabled(true);
		opcionConsulta.setEnabled(true);
 }	
 } 
//-----------------FIN DE EVALUAMOS LOS BOTONES PARA HABILITARLOS O DESHABILITARLOS-------------		
//-----------------------CREAMOS (SOLO 1 VEZ) LOS COMPONENTES DE LA VENTANA--------------------
	public void crearComponentes(){
		// CODIGO
		etiquetaCodigo = new Label("Código");	
		textoCodigo = new TextField();
		textoCodigo.setColumns(10);
		// NOMBRE
		etiquetaNombre = new Label("Nombre");	
		textoNombre = new TextField();
		textoNombre.setColumns(35);
		// CARGO		
		etiquetaCargo = new Label("Cargo");
		textoCargo = new TextField();
		textoCargo.setColumns(35);
		// CODIGO DEPARTAMENTO
		etiquetaCDepartamento = new Label("Código de Departamento");
		textoCDepartamento = new TextField();
		textoCDepartamento.setColumns(5);
		// DEPARTAMENTO
		etiquetaDepartamento = new Label("Departamento");
		textoDepartamento = new TextField();
		textoDepartamento.setColumns(35);
		// PLANTA		
		etiquetaPlanta = new Label("Planta");
		textoPlanta = new TextField();
		textoPlanta.setColumns(5);		
		// ETIQUETA TODOS
		etiquetaTodos = new Label("Para seleccionar todos los empleados, deje los campos en blanco");
	}
//-------------------FIN DE CREAMOS (SOLO 1 VEZ) LOS COMPONENTES DE LA VENTANA--------------------
//----------------------------ESCUCHAMOS LOS EVENTOS DE LOS BOTONES-------------------------------
 public void actionPerformed( ActionEvent event ) {
 String etiqueta = event.getActionCommand();
 
 if ( etiqueta.equals("Aceptar") ) this.Conectar();
 if ( etiqueta.equals("Salir") ) this.Salir();
 if ( etiqueta.equals("Nuevo Empleado") ) this.Alta(); 
 if ( etiqueta.equals("Buscar Empleado") ) this.Buscar(); 
 if ( etiqueta.equals("Buscar") ) this.DatosBuscar(); 
 if ( etiqueta.equals("Dar de Alta") ) this.DatosAlta();
 if ( etiqueta.equals("Ver Datos") ) this.MostrarEmpleado();
 } 
//------------------------FIN DE ESCUCHAMOS LOS EVENTOS DE LOS BOTONES-------------------------------
//------------CONECTAMOS CON EL SERVIDOR EN LA DIRECCION "127.0.0.1" Y EN EL PUERTO "1234"--------------
 public void realizarConexion() {
	
	String ipDestino = "127.0.0.1";
	int puerto = 1234;
	InetAddress direccion = null;
	try {
		//InetAdress especifica el servidor al que nos queremos conectar
		direccion = InetAddress.getByName(ipDestino);
	} catch (UnknownHostException uhe) {
		System.err.println("Host no encontrado..." + uhe);
		DialogoInformativo dErrorUsuario;
 	dErrorUsuario = new DialogoInformativo(ventana, "Servidor no Encontrado", "Intentelo de nuevo más tarde", "Aceptar");
 	dErrorUsuario.setModal( true );
 	dErrorUsuario.setSize(200,150);
 	dErrorUsuario.setVisible(true); 
	}
	try {
		conexion = new Socket(direccion, puerto);
		//Creamos los flujos
		OutputStream flujoDatos = conexion.getOutputStream();
		InputStream flujoEntrada = conexion.getInputStream();
		//Recubrimos los flujos
		flujoSalidaDatos = new DataOutputStream(flujoDatos);
		flujoEntradaFormato = new DataInputStream(flujoEntrada);
		// Estamos conectados
		conectado = true;
	} catch (IOException io) {
		DialogoInformativo dErrorUsuario;
 	dErrorUsuario = new DialogoInformativo(ventana, "Error de comunicaciones", "Servidor fuera de servicio", "Aceptar");
 	dErrorUsuario.setModal( true );
 	dErrorUsuario.setSize(200,150);
 	dErrorUsuario.setVisible(true); 	
	} catch (Exception e) {
		DialogoInformativo dErrorUsuario;
 	dErrorUsuario = new DialogoInformativo(ventana, "Error al establecer la comunicación", "Vuelva a intentarlo más tarde", "Aceptar");
 	dErrorUsuario.setModal( true );
 	dErrorUsuario.setSize(200,150);
 	dErrorUsuario.setVisible(true);
		
	}
 }
//---------FIN DE CONECTAMOS CON EL SERVIDOR EN LA DIRECCION "127.0.0.1" Y EN EL PUERTO "1234"--------------
 
//-------------------------TRATAMOS LOS BOTONES QUE PULSA EL USUARIO----------------------------
 public void Conectar() {
 	if(conectado==false){
 	this.realizarConexion();
 }
 if(conectado==true){
 	this.autenticarse();
 	if ( resultado == 1 ){ 
 		this.construirMenuInferior();
	 } else {
 	 	DialogoInformativo dErrorUsuario;
 		dErrorUsuario = new DialogoInformativo(ventana, "Error de Autenticacion", "Revise los datos", "Aceptar");
 		dErrorUsuario.setModal( true );
 		dErrorUsuario.setSize(200,150);
 		dErrorUsuario.setVisible(true); 
 	}
 }
 } 
 
 
 public void Alta() {
 	this.crearComponentes();
 	this.cargarChoice();
		this.construirPanelAlta();
 this.EvaluarBotones("alta");
 }
 public void Buscar() {
 	this.crearComponentes();
		this.construirPanelBusqueda();
 this.EvaluarBotones("busqueda");
 }
 
 public void DatosAlta() {
 	
 	this.enviarAlta();
 	 if ( resultado==1 ){ 
 	 	this.enviarResultadoAlta();
 	 	this.construirPanelDatos();
 	this.EvaluarBotones("resultado");
 } else if( resultado==0 ){
 		DialogoInformativo dErrorUsuario;
 		dErrorUsuario = new DialogoInformativo(ventana, "Error en el alta", "No puede dejar campos en blanco", "Aceptar");
 		dErrorUsuario.setModal( true );
 		dErrorUsuario.setSize(200,150);
 		dErrorUsuario.setVisible(true);
 	} else if( resultado==10 ){
 		DialogoInformativo dErrorUsuario;
 		dErrorUsuario = new DialogoInformativo(ventana, "Error en el alta", "Ya existe un empleado con ese código", "Aceptar");
 		dErrorUsuario.setModal( true );
 		dErrorUsuario.setSize(200,150);
 		dErrorUsuario.setVisible(true); 	 	 
 		} else if( resultado==20 ){
 		DialogoInformativo dErrorUsuario;
 		dErrorUsuario = new DialogoInformativo(ventana, "Error en el alta", "El código debe ser de 5 caracteres", "Aceptar");
 		dErrorUsuario.setModal( true );
 		dErrorUsuario.setSize(200,150);
 		dErrorUsuario.setVisible(true); 	 	 
 		} 
		
 }
 
 public void DatosBuscar() {
 	
 	this.enviarConsulta();
 	if(resultado!=0){
 		this.construirPanelLista();
 		this.EvaluarBotones("resultado");
 	}else{
 		DialogoInformativo dErrorUsuario;
 		dErrorUsuario = new DialogoInformativo(ventana, "Consulta Finalizada", "Su consulta no obtuvo resultado", "Aceptar");
 		dErrorUsuario.setModal( true );
 		dErrorUsuario.setSize(200,150);
 		dErrorUsuario.setVisible(true); 
 	}	
 }
 
 public void MostrarEmpleado() {
 	
 	this.enviarEmpleadoConsulta();
 	if(resultado==1){
 		this.construirPanelDatos();
 		this.EvaluarBotones("resultado");
 	}else if(resultado==10){
 		DialogoInformativo dErrorUsuario;
 		dErrorUsuario = new DialogoInformativo(ventana, "Consulta Finalizada", "Debe seleccionar un empelado", "Aceptar");
 		dErrorUsuario.setModal( true );
 		dErrorUsuario.setSize(200,150);
 		dErrorUsuario.setVisible(true); 	
 	}else if(resultado==0){
 		DialogoInformativo dErrorUsuario;
 		dErrorUsuario = new DialogoInformativo(ventana, "Consulta Finalizada", "Su consulta no obtuvo resultado", "Aceptar");
 		dErrorUsuario.setModal( true );
 		dErrorUsuario.setSize(200,150);dErrorUsuario.setVisible(true); 
 	}	
 }
	public void cargarChoice() {
			
		try {				
			flujoSalidaDatos.writeInt(3);
			resultado = flujoEntradaFormato.readInt();
			choice = new String[resultado];
			
			if(resultado!=0){
				
				for(int i = 0; i<resultado; i++){
					choice[i] = flujoEntradaFormato.readUTF();
				}
				cajaCDepartamento = new Choice();
				for(int a = 0; a<resultado; a++){
					cajaCDepartamento.add(choice[a]);
				}	
			}		
		} catch (Exception e) {
			DialogoInformativo dErrorUsuario;
 		dErrorUsuario = new DialogoInformativo(ventana, "Error al conectar con el servidor", "Vuelva a conectarse", "Aceptar");
 		dErrorUsuario.setModal( true );
 		dErrorUsuario.setSize(200,150);
 		dErrorUsuario.setVisible(true);
 		ventana.dispose();
		}	
		
	}
	
 public void autenticarse() {
	try {
		datos = new String[2];
		
		datos[0] = textoLogin.getText();
		datos[1] = textoPass.getText();
		for(int i=0; i<datos.length; i++){
			if(datos[i].equals("")){
				resultado = 0;
				
 		} else {
 			if(i==0){
 				flujoSalidaDatos.writeInt(1);
 			}	
				flujoSalidaDatos.writeUTF(datos[i]);
				if(i==1){
					resultado = flujoEntradaFormato.readInt();
				}	
			}
		}	
	} catch (Exception e) {
		DialogoInformativo dErrorUsuario;
 	dErrorUsuario = new DialogoInformativo(ventana, "Error al conectar con el servidor", "Vuelva a conectarse", "Aceptar");
 	dErrorUsuario.setModal( true );
 	dErrorUsuario.setSize(200,150);
 	dErrorUsuario.setVisible(true);
 	ventana.dispose();
	}
 }
	
	
 public void enviarConsulta() {
	try {
				
		flujoSalidaDatos.writeInt(2);
		
		flujoSalidaDatos.writeUTF(textoNombre.getText());
		flujoSalidaDatos.writeUTF(textoCodigo.getText());
							
		resultado = flujoEntradaFormato.readInt();
		datos = new String[resultado];
		
			if(resultado!=0){
				
				for(int i = 0; i<resultado; i++){
					datos[i] = flujoEntradaFormato.readUTF();
				}
				listaEmpleados = new List(5);
				for(int a = 0; a<resultado; a++){
					listaEmpleados.add(datos[a]);
				}	
			}		
	} catch (Exception e) {
		DialogoInformativo dErrorUsuario;
 	dErrorUsuario = new DialogoInformativo(ventana, "Error al conectar con el servidor", "Vuelva a conectarse", "Aceptar");
 	dErrorUsuario.setModal( true );
 	dErrorUsuario.setSize(200,150);
 	dErrorUsuario.setVisible(true);
 	ventana.dispose();
	}
 }
 
 public void enviarAlta() {
	try {
		
		if(textoCodigo.getText().equals("") || textoNombre.getText().equals("") || textoCargo.getText().equals("")){
			resultado = 0;
		} else {	
			if(textoCodigo.getText().length() != 5){
				resultado = 20;
			} else {	
				flujoSalidaDatos.writeInt(4);
				flujoSalidaDatos.writeUTF(textoCodigo.getText());
				flujoSalidaDatos.writeUTF(textoNombre.getText());
				flujoSalidaDatos.writeUTF(textoCargo.getText());
				flujoSalidaDatos.writeUTF(cajaCDepartamento.getSelectedItem());
				resultado = flujoEntradaFormato.readInt();
			}	
		}		
		
	} catch (Exception e) {
		DialogoInformativo dErrorUsuario;
 	dErrorUsuario = new DialogoInformativo(ventana, "Error al conectar con el servidor", "Vuelva a conectarse", "Aceptar");
 	dErrorUsuario.setModal( true );
 	dErrorUsuario.setSize(200,150);
 	dErrorUsuario.setVisible(true);
 	ventana.dispose();
 }
 }
 
 public void enviarEmpleadoConsulta() {
 	
 	try {
		flujoSalidaDatos.writeInt(6);
		if(listaEmpleados.getSelectedIndex()==-1){
			resultado = 10;
		} else {	
			flujoSalidaDatos.writeUTF(listaEmpleados.getSelectedItem());
		
			datos = new String[6];
			for(int i=0; i<datos.length; i++){
				datos[i] = flujoEntradaFormato.readUTF();
			}	
			resultado = flujoEntradaFormato.readInt();
			if(resultado!=0){
				textoCodigo.setText(datos[0]);
				textoNombre.setText(datos[1]);
				textoCargo.setText(datos[2]);
				textoCDepartamento.setText(datos[3]);
				textoDepartamento.setText(datos[4]);
				textoPlanta.setText(datos[5]);
			}
		}
			
	} catch (Exception e) {
		DialogoInformativo dErrorUsuario;
 	dErrorUsuario = new DialogoInformativo(ventana, "Error al conectar con el servidor", "Vuelva a conectarse", "Aceptar");
 	dErrorUsuario.setModal( true );
 	dErrorUsuario.setSize(200,150);
 	dErrorUsuario.setVisible(true);
 	ventana.dispose();
 	}
 	 	
 }
 	
	public void enviarResultadoAlta() {
		try {
			 
			flujoSalidaDatos.writeInt(5);
			flujoSalidaDatos.writeUTF(cajaCDepartamento.getSelectedItem());
			 		
			datos = new String[3];
			
			for(int i=0; i<datos.length; i++){
				datos[i] = flujoEntradaFormato.readUTF();
			}	
			
			resultado = flujoEntradaFormato.readInt();
			if(resultado==1){
				textoCDepartamento.setText(datos[0]);
				textoDepartamento.setText(datos[1]);
				textoPlanta.setText(datos[2]);
				textoCodigo.setText(textoCodigo.getText());
				textoNombre.setText(textoNombre.getText());
				textoCargo.setText(textoCargo.getText());
			}	
		} catch (Exception e) {
			DialogoInformativo dErrorUsuario;
 		dErrorUsuario = new DialogoInformativo(ventana, "Error al conectar con el servidor", "Vuelva a conectarse", "Aceptar");
 		dErrorUsuario.setModal( true );
 		dErrorUsuario.setSize(200,150);
 		dErrorUsuario.setVisible(true);
 		ventana.dispose();
 		}
 	}	
 	
 	public void Salir(){
 		try {
 			if(conectado==false){
 				ventana.dispose();
 			}else{
 				flujoSalidaDatos.writeInt(7);
 				ventana.dispose();
 			}	
 			 			
 		} catch (Exception e) {
 			DialogoInformativo dErrorUsuario;
 		dErrorUsuario = new DialogoInformativo(ventana, "Error al conectar con el servidor", "Vuelva a conectarse", "Aceptar");
 		dErrorUsuario.setModal( true );
 		dErrorUsuario.setSize(200,150);
 		dErrorUsuario.setVisible(true);
 		ventana.dispose();
 		}	
 	}
//---------------------FIN DE TRATAMOS LOS BOTONES QUE PULSA EL USUARIO---------------------------- 	
//--------------------------------FIN DE LA APLICACION CLIENTE-------------------------------------
}
DialogoInformativo.java
import java.awt.*;
import java.awt.event.*;
public class DialogoInformativo extends Dialog implements ActionListener {
 String mensaje, etiqueta;
 public DialogoInformativo(Frame ventana, String titulo, String mensaje, String etiqueta) {
 super(ventana, titulo);
 this.mensaje = mensaje;
 this.etiqueta = etiqueta;
 this.construirDialogo();
 }
 public void construirDialogo() {
 Label etiquetaMensaje = new Label(mensaje);
 Panel panelEtiqueta = new Panel();
 panelEtiqueta.setLayout( new FlowLayout() );
 panelEtiqueta.add( etiquetaMensaje);
 
 Button boton = new Button(etiqueta);
 boton.addActionListener( this );
 Panel panelBoton = new Panel();
 panelBoton.setLayout( new FlowLayout() );
 panelBoton.add( boton);
 
 this.setLayout( new GridLayout(2,1) );
 this.add( panelEtiqueta );
 this.add( panelBoton );
 }
 
 public void actionPerformed(ActionEvent event ) {
 this.dispose();
 }
}
Servidor.java
import java.awt.*;
import java.io.*;
import java.net.*;
import java.awt.event.*;
import java.sql.*;
import java.lang.*;
public class Servidor extends Frame implements ActionListener {
	//Variables Globales
	Label etiquetaIP, etiquetaNClientes, etiquetaEstado, etiquetaContenido;
	TextField textoIP, textoNClientes, textoEstado;
	TextArea txaContenido;
	Button botonApagar;
	public Servidor() {
	
		super("Servidor de Gestion de Empleados");
	}
	public static void main(String args[] ) {
		Servidor obj = new Servidor();obj.inicio();
	}
	public void inicio() {
		etiquetaIP = new Label("Dirección IP local...");
		textoIP = new TextField(30);
		textoIP.setEnabled(false);
		
		etiquetaNClientes = new Label("Nº de clientes autenticados...");
		textoNClientes = new TextField(10);
		textoNClientes.setEnabled(false);
		etiquetaEstado = new Label("Estado de la comunicación...");
		textoEstado = new TextField(20);
		textoEstado.setEnabled(false);
		etiquetaContenido = new Label("Datos recibidos del cliente...");
		txaContenido = new TextArea(4,15);
		txaContenido.setEnabled(false);
		botonApagar = new Button("Apagar Servidor");
		botonApagar.addActionListener(this);
		this.setLayout( new GridLayout(6,2) );
		this.add(etiquetaIP);
		this.add(textoIP);
		this.add(etiquetaNClientes);
		this.add(textoNClientes);
		this.add(etiquetaEstado);
		this.add(textoEstado);
		this.add(etiquetaContenido);
		this.add(txaContenido);
		this.add(botonApagar);
		this.pack();
		this.setSize(400,400);
		this.setVisible(true);
	
		//Buscar y visualizar la dirección IP local donde se ejecuta este programa
		try {
			InetAddress servidor = InetAddress.getLocalHost();
			String cadenaDireccion = servidor.toString();
			textoIP.setText(cadenaDireccion);
		} catch (UnknownHostException uhe ) {
			System.err.println("No se ha podido saber la dirección local: " + uhe );
			
		}
		//Abrimos el socket en el puerto 1234
		ServerSocket conector = null;
		try {
			conector = new ServerSocket(1234);
		} catch (IOException io) {
			System.err.println("Se ha producido un error al abrir el Socket: " + io );
			
		}
		
		//Conexion a la base de datos
		Connection conexionBD=null;
		try {
			Class.forName("org.gjt.mm.mysql.Driver");
			conexionBD = DriverManager.getConnection("jdbc:mysql://localhost/empleados?user=&password=");
						
		} catch (ClassNotFoundException e){
			System.err.println("Clase no encontrada" + e);
		} catch (SQLException e) {
			System.err.println("Base de datos no encontrada" + e);
		}
		
		//Hilo
		int numeroClientes = 0;
		while(true) {
			try {
				textoEstado.setText("Esperando conexión con algún cliente...");
				Socket conexion = conector.accept();
				textoEstado.setText("La conexión se ha establecido con el cliente...");
				numeroClientes ++;
				textoNClientes.setText("" + numeroClientes);
								
				//Creamos el hilo para un cliente
				Hilo h = new Hilo(conexion, conexionBD, txaContenido);
				h.start();
								
								
			} catch (Exception e) {
				System.err.println("Se ha producido un error...");
				
			}
		}
		
	}
	public void actionPerformed (ActionEvent event) {
		
		String cadena = event.getActionCommand();
		if(cadena.equals("Apagar Servidor")) System.exit(0);
	}
}
	
		
	
Hilo.java
import java.awt.*;
import java.net.*;
import java.io.*;
import java.sql.*;
import java.lang.*;
public class Hilo extends Thread {
	
	Socket conexion;
	TextArea txaContenido;
	Connection conexionBD;
	
	Statement envio = null;
	int protocolo = 0;
	int salida = 0;
	int i = 0;
	DataInputStream flujoEntradaDatos = null;
	DataOutputStream flujoSalidaFormato = null;
	String sql = "";
	ResultSet resultado = null;
	ResultSet resultado_aux = null;
	boolean salir = true;
	
	public Hilo ( Socket conexion, Connection conexionBD, TextArea txaContenido) {
		
		super();
		this.conexion = conexion;
		this.txaContenido = txaContenido;
		this.conexionBD = conexionBD;
	
	}
	public void run() {
		
		try {
			//Creamos un flujo de entrada asociado al socket entre el cliente y el servidor
			InputStream flujoDatos = conexion.getInputStream();
			// Creamos el envoltorio para el flujo
			flujoEntradaDatos = new DataInputStream( flujoDatos );
		
			//Creamos un flujo de salida asociado al socket entre el cliente y el servidor
			OutputStream flujoSalida = conexion.getOutputStream();
			// Creamos el envoltorio para el flujo
			flujoSalidaFormato = new DataOutputStream( flujoSalida );
		} catch (Exception e) {
			System.err.println("Se ha producido un error" + e);
			
		}	
		
		
		while (true) {	
			try {
				envio = conexionBD.createStatement();
				//Se lee el primer dato recibido para saber 
				//lo que quiere hacer el cliente
				protocolo = flujoEntradaDatos.readInt();
				switch(protocolo){
					case 1: // AUTENTICARSE
					//Leemos los dos parámetros que nos envía el cliente
					String login = flujoEntradaDatos.readUTF();
					String password = flujoEntradaDatos.readUTF();
					//Visualizamos lo que hemos recibido
					txaContenido.append("Login: " + login + "Pass: " + password+ "\n");
					//Validamos en la BD
					sql = "SELECT * FROM usuarios WHERE login = '"+login+"' AND pass = '"+password+"'";
					resultado = envio.executeQuery(sql);
					System.err.println(sql);				
					//Si todo va bien, devolvemos un 1,
					//en caso contrario un 0
					if (resultado.next()) {
						salida = 1;
	
					} else {
						salida = 0;
	
					}				
					//Enviamos el resultado		
					flujoSalidaFormato.writeInt(salida);
					envio.close();
					
					break;
				//-----------------------------------------
					case 2: // CONSULTA 1 DATOS A LISTA
					String nombre = flujoEntradaDatos.readUTF();
					String codigo = flujoEntradaDatos.readUTF();
					
					//Validamos en la BD
					sql = "SELECT nombre_empleado FROM empleado WHERE codigo_empleado like '%"+codigo+"%' AND nombre_empleado like '%"+nombre+"%'";
					resultado = envio.executeQuery(sql);
					System.err.println(sql);
					i = 0;
					while(resultado.next()){
						i++;
					}		
					
					resultado = envio.executeQuery(sql);
					//Enviamos el resultado, el int es el numero de registros
					flujoSalidaFormato.writeInt(i);
					while(resultado.next()){
						flujoSalidaFormato.writeUTF(resultado.getString(1));
					}
					
					envio.close();
					break;
				//-----------------------------------------
					case 3: // CARGAR CHOICE
					
					//Validamos en la BD
					sql = "SELECT nombre_dpto FROM departamento";
					resultado = envio.executeQuery(sql);
					i = 0;
					while(resultado.next()){
						i++;
					}		
					resultado = envio.executeQuery(sql);
					
					//Enviamos el resultado	un uno si no hay error
					flujoSalidaFormato.writeInt(i);
					while(resultado.next()){
						flujoSalidaFormato.writeUTF(resultado.getString(1));
					}
										
					envio.close();
					break;	
				//-----------------------------------------	
					case 4: //INSERTAR UN NUEVO EMPLEADO
					
					int alta;
					String cod_dep = "";
					String[] campos = new String[4];
					for(int c=0; c<campos.length; c++){
						campos[c] = flujoEntradaDatos.readUTF();
					}
					//Preguntamos si ya existe un empleado
					//con ese codigo
					sql = "SELECT * from empleado WHERE codigo_empleado = '"+campos[0]+"'";
					resultado = envio.executeQuery(sql);
					if(resultado.next()){ //si ya existe...
						alta = 10;
					} else { //si no existe...
						 // Realizamos el alta
						sql = "SELECT codigo_dpto FROM departamento WHERE nombre_dpto = '"+campos[3]+"'";
						resultado = envio.executeQuery(sql);
						while(resultado.next()){
							cod_dep = resultado.getString(1);
						}	 
						sql = "INSERT INTO empleado (codigo_empleado, nombre_empleado, cargo_empleado, codigo_dpto) VALUES ('"+campos[0]+"', '"+campos[1]+"', '"+campos[2]+"', '"+cod_dep+"')";			
						System.err.println(sql);
						alta = envio.executeUpdate(sql);
					}
					
					flujoSalidaFormato.writeInt(alta);
										
					envio.close();
					break;
				//-----------------------------------------
					
					case 5: //Consulta a departamento para mostrar
						//los datos de un alta
					String cod_depto = "";	
					String cod = flujoEntradaDatos.readUTF();
					sql = "SELECT codigo_dpto FROM departamento WHERE nombre_dpto = '"+cod+"'";
					System.err.println(sql);
					resultado = envio.executeQuery(sql);
					while(resultado.next()){
						cod_depto = resultado.getString(1);
					}	 	
					sql = "SELECT * FROM departamento WHERE codigo_dpto = '"+cod_depto+"'";
					resultado = envio.executeQuery(sql);
					while(resultado.next()){flujoSalidaFormato.writeUTF(resultado.getString(1));
						flujoSalidaFormato.writeUTF(resultado.getString(2));
						flujoSalidaFormato.writeUTF(resultado.getString(3));
					}	
					flujoSalidaFormato.writeInt(1);
					envio.close();
					break;	
				//-----------------------------------------
					
					case 6: //RESULTADO CONSULTA FINAL
					
					String emp = flujoEntradaDatos.readUTF();
					String departamento = "";
					int p = 0;
					sql = "SELECT * FROM empleado WHERE nombre_empleado = '"+emp+"'";
					resultado = envio.executeQuery(sql);
					System.err.println(sql);
					while(resultado.next()){
						p++;
						flujoSalidaFormato.writeUTF(resultado.getString(1));
						flujoSalidaFormato.writeUTF(resultado.getString(2));
						flujoSalidaFormato.writeUTF(resultado.getString(3));
						departamento = resultado.getString(4);
						flujoSalidaFormato.writeUTF(departamento);
					}
					if(p!=0){			
						sql = "SELECT nombre_dpto, planta_dpto FROM departamento WHERE codigo_dpto = '"+departamento+"'";
						resultado = envio.executeQuery(sql);
						System.err.println(sql);
						while(resultado.next()){
							flujoSalidaFormato.writeUTF(resultado.getString(1));
							flujoSalidaFormato.writeUTF(resultado.getString(2));
						}
					}	
					flujoSalidaFormato.writeInt(p);
					envio.close();
					break;	
				//-----------------------------------------
					case 7: //MATAR EL HILO
					System.err.println("Un cliente menos");
					this.stop();
					
					break;
				//-----------------------------------------
					
				}//fin del switch
					
				
			
			} catch (SQLException e) {
				System.err.println("Error de SQL..." + e);	
			} catch (EOFException e) {
				System.err.println("Error de fin de fichero..." + e);
			} catch (Exception e) {
				System.err.println("Error al recibir o enviar datos en el hilo..."+e);
			
			}
		}
		
	}
	
}
Inicio.html
<html>
<head>
<title></title>
</head>
<body>
<center><h1></h1></center>
<applet code=Inicio.class width=0 height=0>
Su Navegador no soporta applets en Java
</applet>
</body>
</html>
FUNCIONAMIENTO DE LA APLICACIÓN
La aplicación para la gestión de empleados es una aplicación a tres capas clinete – servidor – base de datos. 
Para la base de datos he utilizado el servidor MySQL y la bse de datos queda reflejada al principio de este documento en el modelo de datos.
El Cliente está desarrollado en un applet que abre un Frame, ahí es donde el usuario podrá interactuar con el sistema.
Al estar integrado en un applet, el usuario posrá acceder vía web a la aplicación estando el applet en un servidor web (Personal Web Server en este caso).
El applet es una clase llamada Inicio.class donde se crea un frame y se construyen todos los componentes de la ventana. Tras construir los componentes, la clase Inicio.class se queda esperando una acción del usuario en el método actionPerformed. Tras recibir dicha acción (pulsar algún botón) el applet, lo primero que hace es intentar conectarse con el servidor en la dirección IP en la que se encuantra corriendo y en el puerto 1234 que es el puerto por el que está escuchando peticiones de clientes. Si la conexión se realiza satisfactoriamente y se crea bien el socket de comunicaciones entre el Cliente y el Servidor, se crean los flujos de entrada y salida para los datos que intercambien el cliente y el servidor (DataOutputStream y DataInputStream). Cada posible petición del usuario la procesa un método en el applet y utiliza los flujos de entrada y salida para comunicarse con el servidor mediante un protocolo para que cada uno de ellos sepa que es lo que tiene que hacer en cada acción del usuario.
El protocolo de comunicación entre el cliente y el servidor es el siguiente:
Del cliente al servidor:
· El cliente envía un 1 para solicitar que el servidor valide en la BD los datos de autenticación.
· El cliente envía un 2 al servidor para realizar una primera consulta realizada por el usuario en la cual se cargará en otro formulario una lista con todos los nombre de empleados que cumplan los criterios de búsqueda seleccionados para que el usuario elija uno de ellos y ver así el detalle de su ficha.
· El cliente envía un 3 para que el servidor pida a la BD los nombres de departamentos existentes y cargarlos en el choice de applet cuando el cliente quiere dar un alta. De este modo, el cliente solo podrá elegir entre los departamentos ya existentes a la hora de crear un nuevo empleado
· El cliente envía un 4 cuando el usuario quiere dar de alta un nuevo empleado una vez rellenados todos sus campos.
· El cliente envía un 5 al servidor para que busque en la BD el registro correspondiente al departamento asociado al nuevo empelado que ha dado de alta el usuario.
· El cliente envía un 6 cuando el usuario ha seleccionado un empleado concreto en la lista y quiere ver el detalle de su condulta.
· El cliente envía un 7 al servidor cuando quiere cerrar la aplicación y de ese modo solicita la desconexión con el servidor matando el hilo.
La clase Hilo.class generada por el servidor evalua en un while true (hasta que se desconecte el cliente) mediante un switch el número que le mande el cliente para tratar de forma correcta su petición.
Del servidor al cliente:
· El Servidor envía un 1 al cliente cuando su solicitud ha sido procesada con éxito.
· El servidor envía un número distinto de 1 cuando se ha producido algún error en su solicitud.
De esta forma, el cliente siempre sabe si su petición al servidor ha sido o no satisfactoria.
Para informar al usuario de los posibles errores que se produzcan minetras ejecuta la aplicación, he creado una clase llamada DialogoInformativo.class que hereda de Frame y su cometido es crear una ventana auxiliar a la aplicación mostrando el texto que se le diga al crear un objeto de dicha clase en el constructor. El constructor de dicha clase recibe tres parámetros, “Titulo de la ventana”, “Texto de la ventana” y “Texto del botón de la ventana”. Esta clase se utiliza para advertir al usuario de posibles errores como que no debe dejar campos en blanco, que los datos introducidos son incorrectos, que se ha perdido la conexión con el servidor, ....
La clse Servidor.class hereda de la clase Frame ya que abre una ventana para mostrar datos específicos acerca de la conexión de los distintos clientes que accedan a él. Tras construir los componentes de la ventana, abre un socket de comunicación en el puerto 1234 que es el puerto donde estará escuchando peticiones por parte de los clientes. Luego realiza la conexión con la base de datos de MySQL (DriverManager.getConnection). Tras realizar la conexión con la BD, ejecuta el método accept() de la clase Socket y se queda esperando la conexión de posibles clientes. Por cada cliente que entra por el accept(), el Servidor abre un hilo para que procese todas las peticiones del cliente, de esta forma la aplicación se convierte en mulhilo, es decir, puede atender a tantos clientes como entren. La clase Servidor.class finaliza cuando se pulsa sobre el botón de la pantalla de dicha clse “Apagar Servidor”.
Para abrir el hilo, me he creado una case Hilo.class la cual recibe tres parámetros en su constructor cuando la invoca el Servidor. Estos parámetros son: El socket de comunicación con entre el cliente y el servidor ( para que sea el hilo quien continue la comunicación con el cliente), La conexión con la base de datos ( para que sea el hilo quien hable con la BD a la hora de hacer consultas, etc), y el tercer parámetro es un componente, es un textArea de la clase Servidor.class donde el hilo escribirá información pertinente al cliente que se ha conectado.
La clase Hilo.class hereda de la clase Thread, por lo que estamos obligados a sobreescribir su método run().
En el método run() nos creamos, al igal en la clase Inicio.class, los flujos de entrada y salida de datos a través de los cuales se comunicarán el hilo y el applet (DataOutputStream y DataInputStream). Tras ello, nos metemos en un bucle infinito while(true) que mantendráuna conexión permanente con el cliente hasta que uno de los dos finalice la conexión. Dentro, nos creamos un Statement (envio = conexionBD.createStatement();) que ejecutará las peticiones a la base de datos de MySQL, y tras ello, recibimos mediante el flujo de entrada creado en el hilo, un entero que determinará el protocolo y por lo tanto la acción a realizar solicitada por el cliente, protocolo = flujoEntradaDatos.readInt(); esa variable la evaluamos en un switch y dependiendo de su valor ejecutamos una u ortra acción siguiendo el protocolo descrito anteriormente en este documento (switch(protocolo)).
FUENTES
Inicio.java
import java.awt.*;
import java.applet.Applet;
import java.awt.event.*;
import java.net.*;
import java.io.*;
public class Inicio extends Applet implements ActionListener{
//-----------------------------------VARIABLES GLOBALES-----------------------------------------
 Frame ventana;
 Panel panelSur, panelMedio, panelNorte, panelCentro;
 Button botonAceptar, botonSalir, botonBuscar, botonBuscarEmpleado, botonNuevoEmpleado, botonAlta, botonVerDatos;
 Panel panelA, panelAs, panelC, panelS, panelS2, panelBsur, panelBusqueda, panelNuevo, panelResultado, panelLista, panelLsur;
 CardLayout cambioPanelCentro = new CardLayout();
 CardLayout cambioPanelSur = new CardLayout();
 Label etiquetaLogin, etiquetaPass, etiquetaTitulo, etiquetaCodigo, etiquetaNombre, etiquetaCargo, etiquetaPlanta, etiquetaDepartamento, etiquetaCDepartamento, etiquetaLista, etiquetaTodos;
 TextField textoLogin, textoPass, textoCodigo, textoNombre, textoCargo, textoPlanta, textoDepartamento, textoCDepartamento;
 MenuBar barraMenu;
 Menu menuGestion, menuSalir;
 MenuItem opcionAlta, opcionConsulta, opcionSalir;
 Socket conexion = null;
 DataInputStream flujoEntradaFormato = null;
 DataOutputStream flujoSalidaDatos = null;
 Choice cajaCDepartamento;
 List listaEmpleados;
 int resultado;
 String[] choice;
 String[] datos;
 boolean conectado = false;
//------------------------------FIN DE VARIABLES GLOBALES----------------------------------------- 
 
 // CREAMOS UN OBJETO FRAME 
 public void init() {
 ventana = new Frame("Aplicacion Gestion de Empleados");
 this.metodoInicio();
 }
 
 // ----------------------------------CONSTRUIMOS LA VENTANA---------------------------------
 public void metodoInicio() {
 this.construirVentana();
 }
 
 public void construirVentana() {
 panelNorte = new Panel();
 panelCentro = new Panel();
 panelMedio = new Panel();
 panelSur = new Panel();
 this.crearComponentes();
 this.construirPanelNorte();
 this.construirPanelMedio();
 this.construirPanelSur();
 this.construirMenu();
 cambioPanelCentro.show( panelMedio, "id" );
 cambioPanelSur.show( panelSur, "log" );
 ventana.setLayout( new BorderLayout() );
 ventana.add(panelNorte, "North");
 ventana.add(panelMedio, "Center");
 ventana.add(panelSur, "South");
 ventana.setMenuBar(barraMenu);
 ventana.setSize(600,400);
 ventana.setVisible(true);
 ventana.setResizable(false); 
 }
 public void construirMenu() {
	barraMenu = new MenuBar();
	menuGestion = new Menu("Gestión");
	menuSalir = new Menu("Salir");
	opcionAlta = new MenuItem("Nuevo Empleado");
	opcionConsulta = new MenuItem("Buscar Empleado");
	opcionSalir = new MenuItem("Salir");
	menuGestion.add(opcionAlta);
	menuGestion.add(opcionConsulta);
	menuSalir.add(opcionSalir);
	barraMenu.add(menuGestion);
	barraMenu.add(menuSalir);
	
	opcionAlta.setEnabled(false);
	opcionConsulta.setEnabled(false);
	opcionAlta.addActionListener( this);
	opcionConsulta.addActionListener( this);
	opcionSalir.addActionListener( this);
 }
 public void construirPanelNorte() {
 
 etiquetaTitulo = new Label("GESTION DE EMPLEADOS");
 etiquetaTitulo.setFont ( new Font ("TimesRoman", Font.BOLD, 16) );
 etiquetaTitulo.setAlignment (Label.CENTER);
 panelNorte.setLayout( new FlowLayout() ); 
 panelNorte.add( etiquetaTitulo );	
 }
 
 public void construirPanelMedio() {
 	Label etiquetaArroba = new Label("@");
 	etiquetaArroba.setFont ( new Font ("Verdana", Font.BOLD, 72) );
 	etiquetaArroba.setAlignment (Label.CENTER);
 	
 panelC = new Panel();
 botonSalir = new Button("Salir");
 panelC.setLayout(new FlowLayout() );
 panelC.add( botonSalir );
 
 panelMedio.setLayout( cambioPanelCentro );
 panelCentro.setLayout( new BorderLayout() );
 panelCentro.setBackground(Color.yellow);
 
 panelCentro.add( etiquetaArroba, "Center"); 
 panelCentro.add( panelC, "South" );
 panelMedio.add( panelCentro, "id" );
 botonSalir.addActionListener( this);
 }
 public void construirPanelSur() {
 panelSur.setLayout( cambioPanelSur );
 panelS = new Panel();
 panelS.setLayout( new FlowLayout() );
 	
 etiquetaLogin = new Label("Login:");
 etiquetaPass = new Label("Password:");
 textoLogin = new TextField();
 textoPass = new TextField();
 textoLogin.setColumns(15);
 textoPass.setColumns(15);
 botonAceptar = new Button("Aceptar");
 panelS.add(etiquetaLogin);
 panelS.add(textoLogin);
 panelS.add(etiquetaPass);
 panelS.add(textoPass);
 panelS.add(botonAceptar);
 
 panelSur.add( panelS, "log" );
 botonAceptar.addActionListener( this);
 }
 public void construirPanelBusqueda() {
	panelBusqueda = new Panel();
	panelBusqueda.setLayout( new BorderLayout() );
	
	panelBsur = new Panel();
 botonBuscar = new Button("Buscar");
 panelBsur.setLayout(new FlowLayout() );
 panelBsur.add( botonBuscar );
	Panel panelB = new Panel();
	panelB.setLayout( new GridLayout(3,1) ); 
	Panel panelB1 = new Panel();
	panelB1.setLayout( new FlowLayout());
	Panel panelB2 = new Panel();	
	panelB2.setLayout( new FlowLayout());
	Panel panelBaux = new Panel();	
	panelBaux.setLayout( new FlowLayout());
	
	panelBaux.add( etiquetaTodos );	
	panelB1.add( etiquetaCodigo );
	panelB1.add( textoCodigo );
	panelB2.add( etiquetaNombre );
	panelB2.add( textoNombre );
	panelB.add( panelBaux );
	panelB.add( panelB1 );
	panelB.add( panelB2 );
	panelBusqueda.add( panelB, "Center" );
	panelBusqueda.add( panelBsur, "South" );	
	panelMedio.add( panelBusqueda, "buscar" );
	cambioPanelCentro.show( panelMedio, "buscar" );
	etiquetaTitulo.setText("BÚSQUEDA DE EMPLEADOS");
	etiquetaTitulo.setFont ( new Font ("TimesRoman", Font.BOLD, 16) );	
	etiquetaTitulo.setAlignment (Label.CENTER);
	botonBuscar.addActionListener( this);
 }
 public void construirPanelAlta() {
	panelA = new Panel();
	panelA.setLayout( new BorderLayout() );
	
	Panel panelAsur;
	panelAsur = new Panel();
 panelAsur.setLayout(new FlowLayout() );
	botonAlta = new Button("Dar de Alta");
 panelAsur.add( botonAlta );
	Panel panelA2 = new Panel();
	panelA2.setLayout( new GridLayout(5,1) ); 
	Panel panelA3 = new Panel();
	panelA3.setLayout( new FlowLayout());
	Panel panelA4 = new Panel();	
	panelA4.setLayout( new FlowLayout());
	Panel panelA5 = new Panel();	
	panelA5.setLayout( new FlowLayout());
	Panel panelA6 = new Panel();	
	panelA6.setLayout( new FlowLayout());
	Panel panelA8 = new Panel();	
	panelA8.setLayout( new FlowLayout());
	Panel panelAaux = new Panel();	
	panelAaux.setLayout( new FlowLayout());
		
	panelA3.add( etiquetaCodigo );
	panelA3.add( textoCodigo );
	panelA4.add( etiquetaNombre );
	panelA4.add( textoNombre );
	panelA5.add( etiquetaCargo );
	panelA5.add( textoCargo );
	panelA8.add( etiquetaCDepartamento );
	panelA8.add( cajaCDepartamento );
	panelA2.add( panelAaux );
	panelA2.add( panelA3 );
	panelA2.add( panelA4 );
	panelA2.add(panelA5 );
	panelA2.add( panelA8 );
	panelA.add( panelA2, "Center" );
	panelA.add( panelAsur, "South" );	
	panelMedio.add( panelA, "alta" );
	cambioPanelCentro.show( panelMedio, "alta" );
	etiquetaTitulo.setText("ALTA DE EMPLEADOS");	
	etiquetaTitulo.setFont ( new Font ("TimesRoman", Font.BOLD, 16) );	
	etiquetaTitulo.setAlignment (Label.CENTER);
	botonAlta.addActionListener( this);
 }
 public void construirPanelDatos() {
	panelA = new Panel();
	panelA.setLayout( new BorderLayout() );
	
	Panel panelAsur;
	panelAsur = new Panel();
 panelAsur.setLayout(new FlowLayout() );
	Panel panelA2 = new Panel();
	panelA2.setLayout( new GridLayout(7,1) ); 
	Panel panelA3 = new Panel();
	panelA3.setLayout( new FlowLayout());
	Panel panelA4 = new Panel();	
	panelA4.setLayout( new FlowLayout());
	Panel panelA5 = new Panel();	
	panelA5.setLayout( new FlowLayout());
	Panel panelA6 = new Panel();	
	panelA6.setLayout( new FlowLayout());
	Panel panelA7 = new Panel();	
	panelA7.setLayout( new FlowLayout());
	Panel panelA8 = new Panel();	
	panelA8.setLayout( new FlowLayout());
	Panel panelAaux = new Panel();	
	panelAaux.setLayout( new FlowLayout());
	
	panelA3.add( etiquetaCodigo );
	panelA3.add( textoCodigo );
	panelA4.add( etiquetaNombre );
	panelA4.add( textoNombre );
	panelA5.add( etiquetaCargo );
	panelA5.add( textoCargo );
	panelA6.add( etiquetaPlanta );
	panelA6.add( textoPlanta );
	panelA7.add( etiquetaDepartamento );
	panelA7.add( textoDepartamento );
	panelA8.add( etiquetaCDepartamento );
	panelA8.add( textoCDepartamento );
	panelA2.add( panelAaux );
	panelA2.add( panelA3 );
	panelA2.add( panelA4 );
	panelA2.add( panelA5 );
	panelA2.add( panelA6 );
	panelA2.add( panelA7 );
	panelA2.add( panelA8 );
	panelA.add( panelA2, "Center" );
	panelA.add( panelAsur, "South" );	
	panelMedio.add( panelA, "alta" );
	cambioPanelCentro.show( panelMedio, "alta" );
	etiquetaTitulo.setText("RESULTADO");	
	etiquetaTitulo.setFont ( new Font ("TimesRoman", Font.BOLD, 16) );	
	etiquetaTitulo.setAlignment (Label.CENTER);
	
 }
	public void construirPanelLista() {
	panelLista = new Panel();
	panelLista.setLayout( new BorderLayout() );
	
	panelLsur = new Panel();
 botonVerDatos = new Button("Ver Datos");
 panelLsur.setLayout(new FlowLayout() );
 panelLsur.add( botonVerDatos );
	Panel panelL = new Panel();
	panelL.setLayout( new GridLayout(2,1) ); 
	Panel panelL1 = new Panel();
	panelL1.setLayout( new FlowLayout());
	Panel panelLaux = new Panel();	
	panelLaux.setLayout( new FlowLayout());
	
	etiquetaLista = new Label("Seleccione un elemento de la lista");	
	panelL1.add( etiquetaLista );
	panelL1.add( listaEmpleados );
	panelL.add( panelLaux );
	panelL.add( panelL1 );
	panelLista.add( panelL, "Center" );
	panelLista.add( panelLsur, "South" );	
	panelMedio.add( panelLista, "listar" );
	cambioPanelCentro.show( panelMedio, "listar" );
	etiquetaTitulo.setText("RESULTADO CONSULTA");
	etiquetaTitulo.setFont ( new Font ("TimesRoman", Font.BOLD, 16) );	
	etiquetaTitulo.setAlignment (Label.CENTER);
	botonVerDatos.addActionListener(this);
	listaEmpleados.addActionListener(this);
 }
 public void construirMenuInferior() {
 
 panelS2 = new Panel();
 panelS2.setLayout( new FlowLayout() );
 	
 botonBuscarEmpleado = new Button("Buscar Empleado");
 botonNuevoEmpleado = new Button("Nuevo Empleado");
 
 panelS2.add(botonBuscarEmpleado);
 panelS2.add(botonNuevoEmpleado);
 panelS2.add(botonSalir);
 
 panelSur.add( panelS2, "normal" ); 
 cambioPanelSur.show( panelSur, "normal" );
 botonBuscarEmpleado.addActionListener( this );
 botonNuevoEmpleado.addActionListener( this );
 this.EvaluarBotones("resultado");	 
 } 	
//-----------------------------------------FIN DE CONSTRUIR LA VENTANA--------------------------
//------------------------EVALUAMOS LOS BOTONES PARA HABILITARLOS O DESHABILITARLOS-------------	
	public void EvaluarBotones(String tipo) {
	 if(tipo.equals("busqueda")){
	 	textoCodigo.setEditable(true);
 	textoNombre.setEditable(true);
 	textoCargo.setEditable(true);
 	textoPlanta.setEditable(true);
 	textoDepartamento.setEditable(true);
 	textoCDepartamento.setEditable(true);
 	
		botonBuscarEmpleado.setEnabled(false);
		botonNuevoEmpleado.setEnabled(true);
		opcionAlta.setEnabled(true);
		opcionConsulta.setEnabled(false);
 }else if(tipo.equals("alta")){
 	textoCodigo.setEditable(true);
 	textoNombre.setEditable(true);
 	textoCargo.setEditable(true);
 	textoPlanta.setEditable(true);
 	textoDepartamento.setEditable(true);
 	textoCDepartamento.setEditable(true);
 	
		botonNuevoEmpleado.setEnabled(false);
		botonBuscarEmpleado.setEnabled(true);
		opcionAlta.setEnabled(false);
		opcionConsulta.setEnabled(true);
 }else if(tipo.equals("resultado")){
 	textoCodigo.setEditable(false);
 	textoNombre.setEditable(false);
 	textoCargo.setEditable(false);
 	textoPlanta.setEditable(false);
 	textoDepartamento.setEditable(false);
 	textoCDepartamento.setEditable(false);
 	
		botonNuevoEmpleado.setEnabled(true);
		botonBuscarEmpleado.setEnabled(true);
		opcionAlta.setEnabled(true);
		opcionConsulta.setEnabled(true);
 }	
 } 
//-----------------FIN DE EVALUAMOS LOS BOTONES PARA HABILITARLOS O DESHABILITARLOS-------------		
//-----------------------CREAMOS (SOLO 1 VEZ) LOS COMPONENTES DE LA VENTANA--------------------
	public void crearComponentes(){
		// CODIGO
		etiquetaCodigo = new Label("Código");	
		textoCodigo = new TextField();
		textoCodigo.setColumns(10);
		// NOMBRE
		etiquetaNombre = new Label("Nombre");	
		textoNombre = new TextField();
		textoNombre.setColumns(35);
		// CARGO		
		etiquetaCargo = new Label("Cargo");
		textoCargo = new TextField();
		textoCargo.setColumns(35);
		// CODIGO DEPARTAMENTO
		etiquetaCDepartamento = new Label("Código de Departamento");
		textoCDepartamento = new TextField();
		textoCDepartamento.setColumns(5);
		// DEPARTAMENTO
		etiquetaDepartamento = new Label("Departamento");
		textoDepartamento = new TextField();
		textoDepartamento.setColumns(35);
		// PLANTA		
		etiquetaPlanta = new Label("Planta");
		textoPlanta = new TextField();
		textoPlanta.setColumns(5);		
		// ETIQUETA TODOS
		etiquetaTodos = new Label("Para seleccionar todos los empleados, deje los campos en blanco");
	}
//-------------------FIN DE CREAMOS (SOLO 1 VEZ) LOS COMPONENTES DE LA VENTANA--------------------
//----------------------------ESCUCHAMOS LOS EVENTOS DE LOS BOTONES-------------------------------
 public void actionPerformed( ActionEvent event ) {
 String etiqueta = event.getActionCommand();
 
 if ( etiqueta.equals("Aceptar") ) this.Conectar();
 if ( etiqueta.equals("Salir") ) this.Salir();
 if ( etiqueta.equals("Nuevo Empleado") ) this.Alta(); 
 if ( etiqueta.equals("Buscar Empleado") ) this.Buscar(); 
 if ( etiqueta.equals("Buscar") ) this.DatosBuscar(); 
 if ( etiqueta.equals("Dar de Alta") ) this.DatosAlta();
 if ( etiqueta.equals("Ver Datos") ) this.MostrarEmpleado();
 } 
//------------------------FIN DE ESCUCHAMOS LOS EVENTOS DE LOS BOTONES-------------------------------
//------------CONECTAMOS CON EL SERVIDOR EN LA DIRECCION "127.0.0.1" Y EN EL PUERTO "1234"--------------
 public void realizarConexion() {
	
	String ipDestino = "127.0.0.1";
	int puerto = 1234;
	InetAddress direccion = null;
	try {
		//InetAdress especifica el servidor al que nos queremos conectar
		direccion = InetAddress.getByName(ipDestino);
	} catch (UnknownHostException uhe) {
		System.err.println("Host no encontrado..." + uhe);
		DialogoInformativo dErrorUsuario;
 	dErrorUsuario = new DialogoInformativo(ventana,"Servidor no Encontrado", "Intentelo de nuevo más tarde", "Aceptar");
 	dErrorUsuario.setModal( true );
 	dErrorUsuario.setSize(200,150);
 	dErrorUsuario.setVisible(true); 
	}
	try {
		conexion = new Socket(direccion, puerto);
		//Creamos los flujos
		OutputStream flujoDatos = conexion.getOutputStream();
		InputStream flujoEntrada = conexion.getInputStream();
		//Recubrimos los flujos
		flujoSalidaDatos = new DataOutputStream(flujoDatos);
		flujoEntradaFormato = new DataInputStream(flujoEntrada);
		// Estamos conectados
		conectado = true;
	} catch (IOException io) {
		DialogoInformativo dErrorUsuario;
 	dErrorUsuario = new DialogoInformativo(ventana, "Error de comunicaciones", "Servidor fuera de servicio", "Aceptar");
 	dErrorUsuario.setModal( true );
 	dErrorUsuario.setSize(200,150);
 	dErrorUsuario.setVisible(true); 	
	} catch (Exception e) {
		DialogoInformativo dErrorUsuario;
 	dErrorUsuario = new DialogoInformativo(ventana, "Error al establecer la comunicación", "Vuelva a intentarlo más tarde", "Aceptar");
 	dErrorUsuario.setModal( true );
 	dErrorUsuario.setSize(200,150);
 	dErrorUsuario.setVisible(true);
		
	}
 }
//---------FIN DE CONECTAMOS CON EL SERVIDOR EN LA DIRECCION "127.0.0.1" Y EN EL PUERTO "1234"--------------
 
//-------------------------TRATAMOS LOS BOTONES QUE PULSA EL USUARIO----------------------------
 public void Conectar() {
 	if(conectado==false){
 	this.realizarConexion();
 }
 if(conectado==true){
 	this.autenticarse();
 	if ( resultado == 1 ){ 
 		this.construirMenuInferior();
	 } else {
 	 	DialogoInformativo dErrorUsuario;
 		dErrorUsuario = new DialogoInformativo(ventana, "Error de Autenticacion", "Revise los datos", "Aceptar");
 		dErrorUsuario.setModal( true );
 		dErrorUsuario.setSize(200,150);
 		dErrorUsuario.setVisible(true); 
 	}
 }
 } 
 
 
 public void Alta() {
 	this.crearComponentes();
 	this.cargarChoice();
		this.construirPanelAlta();
 this.EvaluarBotones("alta");
 }
 public void Buscar() {
 	this.crearComponentes();
		this.construirPanelBusqueda();
 this.EvaluarBotones("busqueda");
 }
 
 public void DatosAlta() {
 	
 	this.enviarAlta();
 	 if ( resultado==1 ){ 
 	 	this.enviarResultadoAlta();
 	 	this.construirPanelDatos();
 	this.EvaluarBotones("resultado");
 } else if( resultado==0 ){
 		DialogoInformativo dErrorUsuario;
 		dErrorUsuario = new DialogoInformativo(ventana, "Error en el alta", "No puede dejar campos en blanco", "Aceptar");
 		dErrorUsuario.setModal( true );
 		dErrorUsuario.setSize(200,150);
 		dErrorUsuario.setVisible(true);
 	} else if( resultado==10 ){
 		DialogoInformativo dErrorUsuario;
 		dErrorUsuario = new DialogoInformativo(ventana, "Error en el alta", "Ya existe un empleado con ese código", "Aceptar");
 		dErrorUsuario.setModal( true );
 		dErrorUsuario.setSize(200,150);
 		dErrorUsuario.setVisible(true); 	 	 
 		} else if( resultado==20 ){
 		DialogoInformativo dErrorUsuario;
 		dErrorUsuario = new DialogoInformativo(ventana, "Error en el alta", "El código debe ser de 5 caracteres", "Aceptar");
 		dErrorUsuario.setModal( true );
 		dErrorUsuario.setSize(200,150);
 		dErrorUsuario.setVisible(true); 	 	 
 		} 
		
 }
 
 public void DatosBuscar() {
 	
 	this.enviarConsulta();
 	if(resultado!=0){
 		this.construirPanelLista();
 		this.EvaluarBotones("resultado");
 	}else{
 		DialogoInformativo dErrorUsuario;
 		dErrorUsuario = new DialogoInformativo(ventana, "Consulta Finalizada", "Su consulta no obtuvo resultado", "Aceptar");
 		dErrorUsuario.setModal( true );
 		dErrorUsuario.setSize(200,150);
 		dErrorUsuario.setVisible(true); 
 	}	
 }
 
 public void MostrarEmpleado() {
 	
 	this.enviarEmpleadoConsulta();
 	if(resultado==1){
 		this.construirPanelDatos();
 		this.EvaluarBotones("resultado");
 	}else if(resultado==10){
 		DialogoInformativo dErrorUsuario;
 		dErrorUsuario = new DialogoInformativo(ventana, "Consulta Finalizada", "Debe seleccionar un empelado", "Aceptar");
 		dErrorUsuario.setModal( true );
 		dErrorUsuario.setSize(200,150);
 		dErrorUsuario.setVisible(true); 	
 	}else if(resultado==0){
 		DialogoInformativo dErrorUsuario;
 		dErrorUsuario = new DialogoInformativo(ventana, "Consulta Finalizada", "Su consulta no obtuvo resultado", "Aceptar");
 		dErrorUsuario.setModal( true );
 		dErrorUsuario.setSize(200,150);
 		dErrorUsuario.setVisible(true); 
 	}	
 }
	public void cargarChoice() {
			
		try {				
			flujoSalidaDatos.writeInt(3);
			resultado = flujoEntradaFormato.readInt();
			choice = new String[resultado];
			
			if(resultado!=0){
				
				for(int i = 0; i<resultado; i++){
					choice[i] = flujoEntradaFormato.readUTF();
				}
				cajaCDepartamento = new Choice();
				for(int a = 0; a<resultado; a++){
					cajaCDepartamento.add(choice[a]);
				}	
			}		
		} catch (Exception e) {
			DialogoInformativo dErrorUsuario;
 		dErrorUsuario = new DialogoInformativo(ventana, "Error al conectar con el servidor", "Vuelva a conectarse", "Aceptar");
 		dErrorUsuario.setModal( true );
 		dErrorUsuario.setSize(200,150);
 		dErrorUsuario.setVisible(true);
 		ventana.dispose();
		}	
		
	}
	
 public void autenticarse() {
	try {
		datos = new String[2];
		
		datos[0] = textoLogin.getText();
		datos[1] = textoPass.getText();
		for(int i=0; i<datos.length; i++){
			if(datos[i].equals("")){
				resultado = 0;
				
 		} else {
 			if(i==0){
 				flujoSalidaDatos.writeInt(1);
 			}	
				flujoSalidaDatos.writeUTF(datos[i]);
				if(i==1){
					resultado = flujoEntradaFormato.readInt();
				}	
			}
		}	
	} catch (Exception e) {
		DialogoInformativo dErrorUsuario;
 	dErrorUsuario = new DialogoInformativo(ventana, "Error al conectar con el servidor", "Vuelva a conectarse", "Aceptar");
 	dErrorUsuario.setModal( true );
 	dErrorUsuario.setSize(200,150);
 	dErrorUsuario.setVisible(true);
 	ventana.dispose();
	}
 }
	
	
 public void enviarConsulta() {
	try {
				
		flujoSalidaDatos.writeInt(2);
		
		flujoSalidaDatos.writeUTF(textoNombre.getText());
		flujoSalidaDatos.writeUTF(textoCodigo.getText());
							
		resultado = flujoEntradaFormato.readInt();
		datos = new String[resultado];
		
			if(resultado!=0){
				
				for(int i = 0; i<resultado; i++){
					datos[i] = flujoEntradaFormato.readUTF();
				}
				listaEmpleados = new List(5);
				for(int a = 0; a<resultado; a++){
					listaEmpleados.add(datos[a]);
				}	
			}		
	} catch (Exception e) {
		DialogoInformativo dErrorUsuario;
 	dErrorUsuario = new DialogoInformativo(ventana, "Error al conectar con el servidor", "Vuelva a conectarse", "Aceptar");
 	dErrorUsuario.setModal( true );
 	dErrorUsuario.setSize(200,150);
 	dErrorUsuario.setVisible(true);
 	ventana.dispose();
	}
 }
 
 public void enviarAlta() {
	try {
		
		if(textoCodigo.getText().equals("") || textoNombre.getText().equals("") || textoCargo.getText().equals("")){
			resultado = 0;
		} else {	
			if(textoCodigo.getText().length()!= 5){
				resultado = 20;
			} else {	
				flujoSalidaDatos.writeInt(4);
				flujoSalidaDatos.writeUTF(textoCodigo.getText());
				flujoSalidaDatos.writeUTF(textoNombre.getText());
				flujoSalidaDatos.writeUTF(textoCargo.getText());
				flujoSalidaDatos.writeUTF(cajaCDepartamento.getSelectedItem());
				resultado = flujoEntradaFormato.readInt();
			}	
		}		
		
	} catch (Exception e) {
		DialogoInformativo dErrorUsuario;
 	dErrorUsuario = new DialogoInformativo(ventana, "Error al conectar con el servidor", "Vuelva a conectarse", "Aceptar");
 	dErrorUsuario.setModal( true );
 	dErrorUsuario.setSize(200,150);
 	dErrorUsuario.setVisible(true);
 	ventana.dispose();
 }
 }
 
 public void enviarEmpleadoConsulta() {
 	
 	try {
		flujoSalidaDatos.writeInt(6);
		if(listaEmpleados.getSelectedIndex()==-1){
			resultado = 10;
		} else {	
			flujoSalidaDatos.writeUTF(listaEmpleados.getSelectedItem());
		
			datos = new String[6];
			for(int i=0; i<datos.length; i++){
				datos[i] = flujoEntradaFormato.readUTF();
			}	
			resultado = flujoEntradaFormato.readInt();
			if(resultado!=0){
				textoCodigo.setText(datos[0]);
				textoNombre.setText(datos[1]);
				textoCargo.setText(datos[2]);
				textoCDepartamento.setText(datos[3]);
				textoDepartamento.setText(datos[4]);
				textoPlanta.setText(datos[5]);
			}
		}
			
	} catch (Exception e) {
		DialogoInformativo dErrorUsuario;
 	dErrorUsuario = new DialogoInformativo(ventana, "Error al conectar con el servidor", "Vuelva a conectarse", "Aceptar");
 	dErrorUsuario.setModal( true );
 	dErrorUsuario.setSize(200,150);
 	dErrorUsuario.setVisible(true);
 	ventana.dispose();
 	}
 	 	
 }
 	
	public void enviarResultadoAlta() {
		try {
			 
			flujoSalidaDatos.writeInt(5);
			flujoSalidaDatos.writeUTF(cajaCDepartamento.getSelectedItem());
			 		
			datos = new String[3];
			
			for(int i=0; i<datos.length; i++){
				datos[i] = flujoEntradaFormato.readUTF();
			}	
			
			resultado = flujoEntradaFormato.readInt();
			if(resultado==1){
				textoCDepartamento.setText(datos[0]);
				textoDepartamento.setText(datos[1]);
				textoPlanta.setText(datos[2]);
				textoCodigo.setText(textoCodigo.getText());
				textoNombre.setText(textoNombre.getText());
				textoCargo.setText(textoCargo.getText());
			}	
		} catch (Exception e) {
			DialogoInformativo dErrorUsuario;
 		dErrorUsuario = new DialogoInformativo(ventana, "Error al conectar con el servidor", "Vuelva a conectarse", "Aceptar");
 		dErrorUsuario.setModal( true );
 		dErrorUsuario.setSize(200,150);
 		dErrorUsuario.setVisible(true);
 		ventana.dispose();
 		}
 	}	
 	
 	public void Salir(){
 		try {
 			if(conectado==false){
 				ventana.dispose();
 			}else{
 				flujoSalidaDatos.writeInt(7);
 				ventana.dispose();
 			}	
 			 			
 		} catch (Exception e) {
 			DialogoInformativo dErrorUsuario;
 		dErrorUsuario = new DialogoInformativo(ventana, "Error al conectar con el servidor", "Vuelva a conectarse", "Aceptar");
 		dErrorUsuario.setModal( true );
 		dErrorUsuario.setSize(200,150);
 		dErrorUsuario.setVisible(true);
 		ventana.dispose();
 		}	
 	}
//---------------------FIN DE TRATAMOS LOS BOTONES QUE PULSA EL USUARIO---------------------------- 	
//--------------------------------FIN DE LA APLICACION CLIENTE-------------------------------------
}
DialogoInformativo.java
import java.awt.*;
import java.awt.event.*;
public class DialogoInformativo extends Dialog implements ActionListener {
 String mensaje, etiqueta;
 public DialogoInformativo(Frame ventana, String titulo, String mensaje, String etiqueta) {
 super(ventana, titulo);
 this.mensaje = mensaje;
 this.etiqueta = etiqueta;
 this.construirDialogo();
 }
 public void construirDialogo() {
 Label etiquetaMensaje = new Label(mensaje);
 Panel panelEtiqueta = new Panel();
 panelEtiqueta.setLayout( new FlowLayout() );
 panelEtiqueta.add( etiquetaMensaje);
 
 Button boton = new Button(etiqueta);
 boton.addActionListener( this );
 Panel panelBoton = new Panel();
 panelBoton.setLayout( new FlowLayout() );
 panelBoton.add( boton);
 
 this.setLayout( new GridLayout(2,1) );
 this.add( panelEtiqueta );
 this.add( panelBoton );
 }
 
 public void actionPerformed(ActionEvent event ) {
 this.dispose();
 }
}
Servidor.java
import java.awt.*;
import java.io.*;
import java.net.*;
import java.awt.event.*;
import java.sql.*;
import java.lang.*;
public class Servidor extends Frame implements ActionListener {
	//Variables Globales
	Label etiquetaIP, etiquetaNClientes, etiquetaEstado, etiquetaContenido;
	TextField textoIP, textoNClientes, textoEstado;
	TextArea txaContenido;
	Button botonApagar;
	public Servidor() {
	
		super("Servidor de Gestion de Empleados");
	}
	public static void main(String args[] ) {
		Servidor obj = new Servidor();
		obj.inicio();
	}
	public void inicio() {
		etiquetaIP = new Label("Dirección IP local...");
		textoIP = new TextField(30);
		textoIP.setEnabled(false);
		
		etiquetaNClientes = new Label("Nº de clientes autenticados...");
		textoNClientes = new TextField(10);
		textoNClientes.setEnabled(false);
		etiquetaEstado = new Label("Estado de la comunicación...");
		textoEstado = new TextField(20);
		textoEstado.setEnabled(false);
		etiquetaContenido = new Label("Datos recibidos del cliente...");
		txaContenido = new TextArea(4,15);
		txaContenido.setEnabled(false);
		botonApagar = new Button("Apagar Servidor");
		botonApagar.addActionListener(this);
		this.setLayout( new GridLayout(6,2) );
		this.add(etiquetaIP);
		this.add(textoIP);
		this.add(etiquetaNClientes);
		this.add(textoNClientes);
		this.add(etiquetaEstado);
		this.add(textoEstado);
		this.add(etiquetaContenido);
		this.add(txaContenido);
		this.add(botonApagar);
		this.pack();
		this.setSize(400,400);
		this.setVisible(true);
	
		//Buscar y visualizar la dirección IP local donde se ejecuta este programa
		try {
			InetAddress servidor = InetAddress.getLocalHost();
			String cadenaDireccion = servidor.toString();
			textoIP.setText(cadenaDireccion);
		} catch (UnknownHostException uhe ) {
			System.err.println("No se ha podido saber la dirección local: " + uhe );
			
		}
		//Abrimos el socket en el puerto 1234
		ServerSocket conector = null;
		try {
			conector = new ServerSocket(1234);
		} catch (IOException io) {
			System.err.println("Se ha producido un error al abrir el Socket: " + io );
			
		}
		
		//Conexion a la base de datos
		Connection conexionBD=null;
		try {
			Class.forName("org.gjt.mm.mysql.Driver");
			conexionBD = DriverManager.getConnection("jdbc:mysql://localhost/empleados?user=&password=");
						
		} catch (ClassNotFoundException e){
			System.err.println("Clase no encontrada" + e);
		} catch (SQLException e) {
			System.err.println("Base de datos no encontrada" + e);
		}
		
		//Hilo
		int numeroClientes = 0;
		while(true) {
			try {
				textoEstado.setText("Esperando conexión con algún cliente...");
				Socket conexion = conector.accept();
				textoEstado.setText("La conexión se ha establecido con el cliente...");
				numeroClientes ++;
				textoNClientes.setText("" + numeroClientes);
								
				//Creamos el hilo para un cliente
				Hilo h = new Hilo(conexion, conexionBD, txaContenido);
				h.start();
								
								
			} catch (Exception e) {
				System.err.println("Se ha producido un error...");
				
			}
		}
		
	}
	public void actionPerformed (ActionEvent event) {
		
		String cadena = event.getActionCommand();
		if(cadena.equals("Apagar Servidor")) System.exit(0);
	}
}
	
		
	
Hilo.java
import java.awt.*;
import java.net.*;
import java.io.*;

Continuar navegando