SlideShare una empresa de Scribd logo
1 de 17
INSTITUTO TECNOLOGICO
SUPERIOR DE COATZACOALCOS
INGENIERIA EN INFORMATICA
ASIGNATURA:PROGRAMACION CLIENTE/SERVIDOR
DOCENTE:I.S.C LIZBETH HERNÁNDEZ OLÁN
TEMA: PROGRAMACION CLIENTE
ALUMNA: ELIANA VALENTIN RUIZ
GRADO Y GRUPO:7° “B
Prueba del cliente
// Fig. 24.8: PruebaCliente.java
// Pruebalaclase Cliente.
importjavax.swing.JFrame;
publicclassPruebaCliente
{
publicstaticvoidmain( Stringargs[] )
{
Cliente aplicacion;//declaralaaplicacióncliente
// si no hayargumentosde líneade comandos
if ( args.length==0 )
aplicacion=new Cliente( "192.168.0.1"); // se conectaa localhost
else
aplicacion=new Cliente( args[ 0] );// usaargs para conectarse
aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE);
aplicacion.ejecutarCliente();//ejecutalaaplicacióncliente
} //finde main
} //finde la clase PruebaCliente
Cliente
// Fig. 24.7: Cliente.java
// Cliente quelee ymuestralainformaciónquese envíadesde unServidor.
importjava.io.EOFException;
importjava.io.IOException;
importjava.io.ObjectInputStream;
importjava.io.ObjectOutputStream;
importjava.net.InetAddress;
importjava.net.Socket;
importjava.awt.BorderLayout;import
java.awt.event.ActionEvent;import
java.awt.event.ActionListener;import
javax.swing.JFrame;
importjavax.swing.JScrollPane;
importjavax.swing.JTextArea;
importjavax.swing.JTextField;
importjavax.swing.SwingUtilities;
publicclassClienteextendsJFrame
{
private JTextFieldcampoIntroducir;//introduce lainformacióndel usuario
private JTextAreaareaPantalla;// muestralainformaciónal usuario
private ObjectOutputStreamsalida;//flujode salidahaciael servidor
private ObjectInputStreamentrada;//flujode entradadel servidor
private Stringmensaje ="";// mensaje del servidor
private StringservidorChat;//alojaal servidorparaestaaplicación
private Socketcliente;//socketparacomunicarse conel servidor
// inicializael objetoservidorChatyestablece la GUI
publicCliente( Stringhost)
{
super( "Cliente");
servidorChat=host;//establece el servidoral que se conectaeste cliente
campoIntroducir=new JTextField();//creaobjetocampoIntroducir
campoIntroducir.setEditable( false );
campoIntroducir.addActionListener(
new ActionListener()
{
// envíael mensaje al servidor
publicvoidactionPerformed(ActionEventevento )
{
enviarDatos( evento.getActionCommand() );
campoIntroducir.setText( "" );
} //findel métodoactionPerformed
} //finde la clase internaanónima
);// finde la llamadaa addActionListener
add( campoIntroducir, BorderLayout.NORTH );
areaPantalla=new JTextArea();//creaobjetoareaPantalla
add( new JScrollPane(areaPantalla), BorderLayout.CENTER);
setSize( 300,150 ); //establece el tamañode laventana
setVisible( true );//muestralaventana
} //findel constructorde Cliente
// se conectaal servidoryprocesalosmensajes que ésteenvía
publicvoidejecutarCliente()
{
try //se conectaal servidor, obtieneflujos, procesalaconexión
{
conectarAlServidor();//creaunobjetoSocketparahacerla conexión
obtenerFlujos();//obtiene losflujosde entradaysalida
procesarConexion();//procesalaconexión
} //finde try
catch ( EOFExceptionexcepcionEOF)
{
mostrarMensaje( "nClienteterminolaconexion");
} //finde catch
catch ( IOExceptionexcepcionES)
{
excepcionES.printStackTrace();
} //finde catch
finally
{
cerrarConexion();//cierralaconexión
} //finde finally
} //findel métodoejecutarCliente
// se conectaal servidor
private voidconectarAlServidor() throwsIOException
{
mostrarMensaje( "Intentandorealizarconexionn");
// creaobjetoSocketparahacer conexiónconel servidor
cliente =new Socket( InetAddress.getByName( servidorChat), 12345 );
// muestralainformaciónde laconexión
mostrarMensaje( "Conectadoa:"+
cliente.getInetAddress().getHostName() );
} //findel métodoconectarAlServidor
// obtiene flujosparaenviaryrecibirdatos
private voidobtenerFlujos()throwsIOException
{
// establece flujode salidaparalosobjetos
salida= new ObjectOutputStream( cliente.getOutputStream() );
salida.flush();//vacíael búferde salidapara enviarinformaciónde encabezado
// establece flujode entradaparalosobjetos
entrada= new ObjectInputStream(cliente.getInputStream() );
mostrarMensaje( "nSeobtuvieronlosflujosde E/Sn");
} //findel métodoobtenerFlujos
// procesalaconexiónconel servidor
private voidprocesarConexion() throwsIOException
{
// habilitacampoIntroducirparaque el usuariocliente puedaenviarmensajes
establecerCampoEditable( true );
do// procesalosmensajes que se envíandesde el servidor
{
try //lee el mensaje ylomuestra
{
mensaje =( String) entrada.readObject();//lee nuevomensaje
mostrarMensaje( "n"+mensaje );//muestrael mensaje
} //finde try
catch ( ClassNotFoundExceptionexcepcionClaseNoEncontrada)
{
mostrarMensaje( "nSerecibiountipode objetodesconocido");
} //finde catch
} while ( !mensaje.equals("SERVIDOR>>>TERMINAR") );
} //findel métodoprocesarConexion
// cierraflujosysocket
private voidcerrarConexion()
{
mostrarMensaje( "nCerrandoconexion");
establecerCampoEditable( false );//deshabilitacampoIntroducir
try
{
salida.close();//cierrael flujode salida
entrada.close();//cierrael flujode entrada1
cliente.close();//cierrael socket
} //finde try
catch ( IOExceptionexcepcionES)
{
excepcionES.printStackTrace();
} //finde catch
} //findel métodocerrarConexion
// envíaun mensaje al servidor
private voidenviarDatos( Stringmensaje )
{
try //envía unobjetoal servidor
{
salida.writeObject( "CLIENTE>>>"+ mensaje );
salida.flush();//envíatodoslosdatosala salida
mostrarMensaje( "nCLIENTE>>>" + mensaje );
} //finde try
catch ( IOExceptionexcepcionES)
{
areaPantalla.append( "nErroral escribirobjeto");
} //finde catch
} //findel métodoenviarDatos
// manipulael objetoareaPantallaenel subprocesodespachadorde eventos
private voidmostrarMensaje( finalStringmensajeAMostrar)
{
SwingUtilities.invokeLater(
new Runnable()
{
publicvoidrun() //actualizaobjetoareaPantalla
{
areaPantalla.append( mensajeAMostrar);
} //findel métodorun
} //finde la clase internaanónima
);// finde la llamadaa SwingUtilities.invokeLater
} //findel métodomostrarMensaje
// manipulaacampoIntroducirenel subprocesodespachadorde eventos
private voidestablecerCampoEditable( final booleaneditable)
{
SwingUtilities.invokeLater(
new Runnable()
{
publicvoidrun() //establecelapropiedadde ediciónde campoIntroducir
{
campoIntroducir.setEditable( editable);
} //findel métodorun
} //finde la clase internaanónima
);// finde la llamadaa SwingUtilities.invokeLater
} //findel métodoestablecerCampoEditable
} //finde la clase Cliente
Prueba servidor
// Fig. 24.6: PruebaServidor.java
// PruebalaaplicaciónServidor.
importjavax.swing.JFrame;
publicclassPruebaServidor
{
publicstaticvoidmain( Stringargs[] )
{
Servidoraplicacion=new Servidor();//creael servidor
aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE);
aplicacion.ejecutarServidor();//ejecutalaaplicaciónservidor
} //finde main
} //finde la clase PruebaServidor
Servidor
// Fig. 24.5: Servidor.java
// Establece unservidorque recibe unaconexiónde uncliente,envía
// unacadenaal cliente ycierralaconexión.
importjava.io.EOFException;
importjava.io.IOException;
importjava.io.ObjectInputStream;
importjava.io.ObjectOutputStream;
importjava.net.ServerSocket;
importjava.net.Socket;
importjava.awt.BorderLayout;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjavax.swing.JFrame;
importjavax.swing.JScrollPane;
importjavax.swing.JTextArea;
importjavax.swing.JTextField;
importjavax.swing.SwingUtilities;
publicclassServidorextendsJFrame
{
private JTextFieldcampoIntroducir;//recibe comoentradaunmensaje del usuario
private JTextAreaareaPantalla;//muestrainformaciónal usuario
private ObjectOutputStreamsalida;//flujode salidahaciael cliente
private ObjectInputStreamentrada;//flujode entradadel cliente
private ServerSocketservidor;//socketservidor
private Socketconexion;//conexiónal cliente
private intcontador= 1; //contador del númerode conexiones
// establece laGUI
publicServidor()
{
super( "Servidor");
campoIntroducir=new JTextField();//creaobjetocampoIntroducir
campoIntroducir.setEditable( false);
campoIntroducir.addActionListener(
new ActionListener()
{
// envíaun mensaje al cliente
publicvoidactionPerformed(ActionEventevento)
{
enviarDatos( evento.getActionCommand());
campoIntroducir.setText( "");
} //findel métodoactionPerformed
} //finde la clase internaanónima
);// finde la llamadaa addActionListener
add( campoIntroducir, BorderLayout.NORTH);
areaPantalla=new JTextArea();// creaobjetoareaPantalla
add( new JScrollPane(areaPantalla), BorderLayout.CENTER);
setSize( 300,150 ); //establece el tamañode laventana
setVisible( true );//muestralaventana
} //findel constructorde Servidor
// establece yejecutael servidor
publicvoidejecutarServidor()
{
try //establece el servidorparaque recibaconexiones;procesalasconexiones
{
servidor= newServerSocket(12345, 100 ); // crea objetoServerSocket
while ( true )
{
try
{
esperarConexion();//esperaunaconexión
obtenerFlujos();//obtiene losflujosde entradaysalida
procesarConexion();//procesalaconexión
} //finde try
catch ( EOFExceptionexcepcionEOF)
{
mostrarMensaje( "nServidorterminolaconexion");
} //finde catch
finally
{
cerrarConexion();//cierralaconexión
contador++;
} //finde finally
} //finde while
} //finde try
catch ( IOExceptionexepcionES)
{
exepcionES.printStackTrace();
} //finde catch
} //findel métodoejecutarServidor
// esperaaque llegue unaconexión,despuésmuestrainformaciónsobre ésta
private voidesperarConexion() throwsIOException
{
mostrarMensaje( "Esperandounaconexionn");
conexion=servidor.accept();//permite al servidoraceptarlaconexión
mostrarMensaje( "Conexion"+contador+ " recibidade:"+
conexion.getInetAddress().getHostName() );
} //findel métodoesperarConexion
// obtiene flujosparaenviaryrecibirdatos
private voidobtenerFlujos()throwsIOException
{
// establece el flujode salidaparalosobjetos
salida= new ObjectOutputStream( conexion.getOutputStream() );
salida.flush();//vacíael búferde salidapara enviarinformacióndelencabezado
// establece el flujode entradaparalosobjetos
entrada= new ObjectInputStream(conexion.getInputStream() );
mostrarMensaje( "nSeobtuvieronlosflujosde E/Sn");
} //findel métodoobtenerFlujos
// procesalaconexiónconel cliente
private voidprocesarConexion() throwsIOException
{
Stringmensaje ="Conexionexitosa";
enviarDatos( mensaje );//envíamensaje de conexiónexitosa
// habilitacampoIntroducirparaque el usuariodel servidorpuedaenviarmensajes
setTextFieldEditable( true );
do// procesalosmensajes enviadosdesde el cliente
{
try //lee el mensaje ylomuestraenpantalla
{
mensaje =( String) entrada.readObject();//lee el nuevomensaje
mostrarMensaje( "n"+mensaje );//muestrael mensaje
} //finde try
catch ( ClassNotFoundExceptionexcepcionClaseNoEncontrada)
{
mostrarMensaje( "nSerecibiountipode objetodesconocido");
} //finde catch
} while ( !mensaje.equals("CLIENTE>>>TERMINAR") );
} //findel métodoprocesarConexion
// cierraflujosysocket
private voidcerrarConexion()
{
mostrarMensaje( "nTerminandoconexionn");
setTextFieldEditable( false);//deshabilitacampoIntroducir
try
{
salida.close();//cierraflujode salida
entrada.close();//cierraflujode entrada
conexion.close();//cierrael socket
} //finde try
catch ( IOExceptionexepcionES)
{
exepcionES.printStackTrace();
} //finde catch
} //findel métodocerrarConexion
// envíael mensaje al cliente
private voidenviarDatos( Stringmensaje )
{
try //envía objetoal cliente
{
salida.writeObject( "SERVIDOR>>>"+ mensaje );
salida.flush();//envíatodalasalidaal cliente
mostrarMensaje( "nSERVIDOR>>>" + mensaje );
} //finde try
catch ( IOExceptionexepcionES)
{
areaPantalla.append( "nErroral escribirobjeto");
} //finde catch
} //findel métodoenviarDatos
// manipulaareaPantallaenel subprocesodespachadorde eventos
private voidmostrarMensaje( finalStringmensajeAMostrar)
{
SwingUtilities.invokeLater(
new Runnable()
{
publicvoidrun() //actualizaareaPantalla
{
areaPantalla.append( mensajeAMostrar);//adjuntael mensaje
} //findel métodorun
} //finde la clase internaanónima
);// finde la llamadaa SwingUtilities.invokeLater
} //findel métodomostrarMensaje
// manipulaacampoIntroducirenel subprocesodespachadorde eventos
private voidsetTextFieldEditable(finalbooleaneditable )
{
SwingUtilities.invokeLater(
new Runnable()
{
publicvoidrun() //establece lapropiedadde ediciónde campoIntroducir
{
campoIntroducir.setEditable( editable);
} //findel método
} //finde la clase interna
);// finde la llamadaa SwingUtilities.invokeLater
} //findel métodosetTextFieldEditable
} //finde la clase Servidor

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Java Rmi
Java RmiJava Rmi
Java Rmi
 
Deber piramide y cubo
Deber piramide y cuboDeber piramide y cubo
Deber piramide y cubo
 
Introducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGRIntroducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGR
 
Manual PHP 7
Manual PHP 7Manual PHP 7
Manual PHP 7
 
Por pagar
Por pagarPor pagar
Por pagar
 
Tema 10 excepciones
Tema 10 excepcionesTema 10 excepciones
Tema 10 excepciones
 
Constructores & excepciones
Constructores & excepcionesConstructores & excepciones
Constructores & excepciones
 
Tdd
TddTdd
Tdd
 
Guiajsvalidacion
GuiajsvalidacionGuiajsvalidacion
Guiajsvalidacion
 
Novedades de PHP 7.*
Novedades de PHP 7.*Novedades de PHP 7.*
Novedades de PHP 7.*
 
Manejo de excepciones en Java
Manejo de excepciones en JavaManejo de excepciones en Java
Manejo de excepciones en Java
 
Excepciones
ExcepcionesExcepciones
Excepciones
 
32773 php-basico
32773 php-basico32773 php-basico
32773 php-basico
 
Ejemplo de solución de práctica funciones stl
Ejemplo de solución de práctica funciones stlEjemplo de solución de práctica funciones stl
Ejemplo de solución de práctica funciones stl
 
Creación de Builders y DSL's con Groovy
Creación de Builders y DSL's con GroovyCreación de Builders y DSL's con Groovy
Creación de Builders y DSL's con Groovy
 
Introducción a recaptcha 3.0
Introducción a recaptcha 3.0Introducción a recaptcha 3.0
Introducción a recaptcha 3.0
 
Angular Conceptos Practicos 2
Angular Conceptos Practicos 2Angular Conceptos Practicos 2
Angular Conceptos Practicos 2
 
Ejemplo Java Rmi
Ejemplo Java RmiEjemplo Java Rmi
Ejemplo Java Rmi
 
Php Con Postgres
Php Con PostgresPhp Con Postgres
Php Con Postgres
 
EXCEPCIONES JAVA
EXCEPCIONES JAVAEXCEPCIONES JAVA
EXCEPCIONES JAVA
 

Similar a Programacion Servidor-Chat

P R A C T I C A2
P R A C T I C A2P R A C T I C A2
P R A C T I C A2climancc
 
Sistemas Tolerantes a Fallas
Sistemas Tolerantes a FallasSistemas Tolerantes a Fallas
Sistemas Tolerantes a FallasAgustin Ramos
 
Desarrollo de sistemas tolerantes a fallas
Desarrollo de sistemas tolerantes a fallasDesarrollo de sistemas tolerantes a fallas
Desarrollo de sistemas tolerantes a fallasSoftware Guru
 
Ejemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPC
Ejemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPCEjemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPC
Ejemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPCIvan Luis Jimenez
 
Unit Testing - Trovit
Unit Testing - TrovitUnit Testing - Trovit
Unit Testing - TrovitJordi Gerona
 
Presentación Workshop php Barcelona Seguridad
Presentación Workshop php Barcelona SeguridadPresentación Workshop php Barcelona Seguridad
Presentación Workshop php Barcelona Seguridadguestbfa74a
 
JavaScript no es Vietnam
JavaScript no es VietnamJavaScript no es Vietnam
JavaScript no es VietnamAlex Casquete
 
Unit Testing - GTUG
Unit Testing - GTUGUnit Testing - GTUG
Unit Testing - GTUGJordi Gerona
 
Introducción a la Progamación en Javascript. Classe 2
Introducción a la Progamación en Javascript. Classe 2Introducción a la Progamación en Javascript. Classe 2
Introducción a la Progamación en Javascript. Classe 2xjordi
 
2015 10 - Curso Cliente @firma INAP día 2
2015 10 - Curso Cliente @firma INAP día 22015 10 - Curso Cliente @firma INAP día 2
2015 10 - Curso Cliente @firma INAP día 2Tomás García-Merás
 
Tecnologías para microservicios
Tecnologías para microserviciosTecnologías para microservicios
Tecnologías para microserviciosPedro J. Molina
 

Similar a Programacion Servidor-Chat (20)

P R A C T I C A2
P R A C T I C A2P R A C T I C A2
P R A C T I C A2
 
Sistemas Tolerantes a Fallas
Sistemas Tolerantes a FallasSistemas Tolerantes a Fallas
Sistemas Tolerantes a Fallas
 
Desarrollo de sistemas tolerantes a fallas
Desarrollo de sistemas tolerantes a fallasDesarrollo de sistemas tolerantes a fallas
Desarrollo de sistemas tolerantes a fallas
 
Tema servlets
Tema servletsTema servlets
Tema servlets
 
Tema servlets
Tema servletsTema servlets
Tema servlets
 
Tema servlets
Tema servletsTema servlets
Tema servlets
 
Tema servlets
Tema servletsTema servlets
Tema servlets
 
Ejemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPC
Ejemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPCEjemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPC
Ejemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPC
 
Unit Testing - Trovit
Unit Testing - TrovitUnit Testing - Trovit
Unit Testing - Trovit
 
Ajax
AjaxAjax
Ajax
 
Presentación Workshop php Barcelona Seguridad
Presentación Workshop php Barcelona SeguridadPresentación Workshop php Barcelona Seguridad
Presentación Workshop php Barcelona Seguridad
 
JavaScript no es Vietnam
JavaScript no es VietnamJavaScript no es Vietnam
JavaScript no es Vietnam
 
Introducción a TDD y PHPUnit
Introducción a TDD y PHPUnitIntroducción a TDD y PHPUnit
Introducción a TDD y PHPUnit
 
Ejemplo de aplicación cliente-servidor en C#
Ejemplo de aplicación cliente-servidor  en C#Ejemplo de aplicación cliente-servidor  en C#
Ejemplo de aplicación cliente-servidor en C#
 
Sockets
SocketsSockets
Sockets
 
Unit Testing - GTUG
Unit Testing - GTUGUnit Testing - GTUG
Unit Testing - GTUG
 
Introducción a la Progamación en Javascript. Classe 2
Introducción a la Progamación en Javascript. Classe 2Introducción a la Progamación en Javascript. Classe 2
Introducción a la Progamación en Javascript. Classe 2
 
2015 10 - Curso Cliente @firma INAP día 2
2015 10 - Curso Cliente @firma INAP día 22015 10 - Curso Cliente @firma INAP día 2
2015 10 - Curso Cliente @firma INAP día 2
 
Patrones utiles para solid
Patrones utiles para solidPatrones utiles para solid
Patrones utiles para solid
 
Tecnologías para microservicios
Tecnologías para microserviciosTecnologías para microservicios
Tecnologías para microservicios
 

Programacion Servidor-Chat

  • 1. INSTITUTO TECNOLOGICO SUPERIOR DE COATZACOALCOS INGENIERIA EN INFORMATICA ASIGNATURA:PROGRAMACION CLIENTE/SERVIDOR DOCENTE:I.S.C LIZBETH HERNÁNDEZ OLÁN TEMA: PROGRAMACION CLIENTE ALUMNA: ELIANA VALENTIN RUIZ GRADO Y GRUPO:7° “B
  • 2. Prueba del cliente // Fig. 24.8: PruebaCliente.java // Pruebalaclase Cliente. importjavax.swing.JFrame; publicclassPruebaCliente { publicstaticvoidmain( Stringargs[] ) { Cliente aplicacion;//declaralaaplicacióncliente // si no hayargumentosde líneade comandos if ( args.length==0 ) aplicacion=new Cliente( "192.168.0.1"); // se conectaa localhost else aplicacion=new Cliente( args[ 0] );// usaargs para conectarse aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); aplicacion.ejecutarCliente();//ejecutalaaplicacióncliente } //finde main } //finde la clase PruebaCliente
  • 3. Cliente // Fig. 24.7: Cliente.java // Cliente quelee ymuestralainformaciónquese envíadesde unServidor. importjava.io.EOFException; importjava.io.IOException; importjava.io.ObjectInputStream; importjava.io.ObjectOutputStream; importjava.net.InetAddress; importjava.net.Socket; importjava.awt.BorderLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JFrame; importjavax.swing.JScrollPane; importjavax.swing.JTextArea; importjavax.swing.JTextField; importjavax.swing.SwingUtilities; publicclassClienteextendsJFrame { private JTextFieldcampoIntroducir;//introduce lainformacióndel usuario private JTextAreaareaPantalla;// muestralainformaciónal usuario private ObjectOutputStreamsalida;//flujode salidahaciael servidor private ObjectInputStreamentrada;//flujode entradadel servidor private Stringmensaje ="";// mensaje del servidor private StringservidorChat;//alojaal servidorparaestaaplicación private Socketcliente;//socketparacomunicarse conel servidor
  • 4. // inicializael objetoservidorChatyestablece la GUI publicCliente( Stringhost) { super( "Cliente"); servidorChat=host;//establece el servidoral que se conectaeste cliente campoIntroducir=new JTextField();//creaobjetocampoIntroducir campoIntroducir.setEditable( false ); campoIntroducir.addActionListener( new ActionListener() { // envíael mensaje al servidor publicvoidactionPerformed(ActionEventevento ) { enviarDatos( evento.getActionCommand() ); campoIntroducir.setText( "" ); } //findel métodoactionPerformed } //finde la clase internaanónima );// finde la llamadaa addActionListener add( campoIntroducir, BorderLayout.NORTH ); areaPantalla=new JTextArea();//creaobjetoareaPantalla add( new JScrollPane(areaPantalla), BorderLayout.CENTER); setSize( 300,150 ); //establece el tamañode laventana setVisible( true );//muestralaventana } //findel constructorde Cliente
  • 5. // se conectaal servidoryprocesalosmensajes que ésteenvía publicvoidejecutarCliente() { try //se conectaal servidor, obtieneflujos, procesalaconexión { conectarAlServidor();//creaunobjetoSocketparahacerla conexión obtenerFlujos();//obtiene losflujosde entradaysalida procesarConexion();//procesalaconexión } //finde try catch ( EOFExceptionexcepcionEOF) { mostrarMensaje( "nClienteterminolaconexion"); } //finde catch catch ( IOExceptionexcepcionES) { excepcionES.printStackTrace(); } //finde catch finally { cerrarConexion();//cierralaconexión } //finde finally } //findel métodoejecutarCliente // se conectaal servidor private voidconectarAlServidor() throwsIOException { mostrarMensaje( "Intentandorealizarconexionn");
  • 6. // creaobjetoSocketparahacer conexiónconel servidor cliente =new Socket( InetAddress.getByName( servidorChat), 12345 ); // muestralainformaciónde laconexión mostrarMensaje( "Conectadoa:"+ cliente.getInetAddress().getHostName() ); } //findel métodoconectarAlServidor // obtiene flujosparaenviaryrecibirdatos private voidobtenerFlujos()throwsIOException { // establece flujode salidaparalosobjetos salida= new ObjectOutputStream( cliente.getOutputStream() ); salida.flush();//vacíael búferde salidapara enviarinformaciónde encabezado // establece flujode entradaparalosobjetos entrada= new ObjectInputStream(cliente.getInputStream() ); mostrarMensaje( "nSeobtuvieronlosflujosde E/Sn"); } //findel métodoobtenerFlujos // procesalaconexiónconel servidor private voidprocesarConexion() throwsIOException { // habilitacampoIntroducirparaque el usuariocliente puedaenviarmensajes establecerCampoEditable( true ); do// procesalosmensajes que se envíandesde el servidor {
  • 7. try //lee el mensaje ylomuestra { mensaje =( String) entrada.readObject();//lee nuevomensaje mostrarMensaje( "n"+mensaje );//muestrael mensaje } //finde try catch ( ClassNotFoundExceptionexcepcionClaseNoEncontrada) { mostrarMensaje( "nSerecibiountipode objetodesconocido"); } //finde catch } while ( !mensaje.equals("SERVIDOR>>>TERMINAR") ); } //findel métodoprocesarConexion // cierraflujosysocket private voidcerrarConexion() { mostrarMensaje( "nCerrandoconexion"); establecerCampoEditable( false );//deshabilitacampoIntroducir try { salida.close();//cierrael flujode salida entrada.close();//cierrael flujode entrada1 cliente.close();//cierrael socket } //finde try catch ( IOExceptionexcepcionES) { excepcionES.printStackTrace(); } //finde catch
  • 8. } //findel métodocerrarConexion // envíaun mensaje al servidor private voidenviarDatos( Stringmensaje ) { try //envía unobjetoal servidor { salida.writeObject( "CLIENTE>>>"+ mensaje ); salida.flush();//envíatodoslosdatosala salida mostrarMensaje( "nCLIENTE>>>" + mensaje ); } //finde try catch ( IOExceptionexcepcionES) { areaPantalla.append( "nErroral escribirobjeto"); } //finde catch } //findel métodoenviarDatos // manipulael objetoareaPantallaenel subprocesodespachadorde eventos private voidmostrarMensaje( finalStringmensajeAMostrar) { SwingUtilities.invokeLater( new Runnable() { publicvoidrun() //actualizaobjetoareaPantalla { areaPantalla.append( mensajeAMostrar); } //findel métodorun } //finde la clase internaanónima );// finde la llamadaa SwingUtilities.invokeLater
  • 9. } //findel métodomostrarMensaje // manipulaacampoIntroducirenel subprocesodespachadorde eventos private voidestablecerCampoEditable( final booleaneditable) { SwingUtilities.invokeLater( new Runnable() { publicvoidrun() //establecelapropiedadde ediciónde campoIntroducir { campoIntroducir.setEditable( editable); } //findel métodorun } //finde la clase internaanónima );// finde la llamadaa SwingUtilities.invokeLater } //findel métodoestablecerCampoEditable } //finde la clase Cliente
  • 10. Prueba servidor // Fig. 24.6: PruebaServidor.java // PruebalaaplicaciónServidor. importjavax.swing.JFrame; publicclassPruebaServidor { publicstaticvoidmain( Stringargs[] ) { Servidoraplicacion=new Servidor();//creael servidor aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); aplicacion.ejecutarServidor();//ejecutalaaplicaciónservidor } //finde main } //finde la clase PruebaServidor Servidor // Fig. 24.5: Servidor.java // Establece unservidorque recibe unaconexiónde uncliente,envía // unacadenaal cliente ycierralaconexión. importjava.io.EOFException; importjava.io.IOException; importjava.io.ObjectInputStream; importjava.io.ObjectOutputStream; importjava.net.ServerSocket; importjava.net.Socket; importjava.awt.BorderLayout; importjava.awt.event.ActionEvent;
  • 11. importjava.awt.event.ActionListener; importjavax.swing.JFrame; importjavax.swing.JScrollPane; importjavax.swing.JTextArea; importjavax.swing.JTextField; importjavax.swing.SwingUtilities; publicclassServidorextendsJFrame { private JTextFieldcampoIntroducir;//recibe comoentradaunmensaje del usuario private JTextAreaareaPantalla;//muestrainformaciónal usuario private ObjectOutputStreamsalida;//flujode salidahaciael cliente private ObjectInputStreamentrada;//flujode entradadel cliente private ServerSocketservidor;//socketservidor private Socketconexion;//conexiónal cliente private intcontador= 1; //contador del númerode conexiones // establece laGUI publicServidor() { super( "Servidor"); campoIntroducir=new JTextField();//creaobjetocampoIntroducir campoIntroducir.setEditable( false); campoIntroducir.addActionListener( new ActionListener() { // envíaun mensaje al cliente publicvoidactionPerformed(ActionEventevento)
  • 12. { enviarDatos( evento.getActionCommand()); campoIntroducir.setText( ""); } //findel métodoactionPerformed } //finde la clase internaanónima );// finde la llamadaa addActionListener add( campoIntroducir, BorderLayout.NORTH); areaPantalla=new JTextArea();// creaobjetoareaPantalla add( new JScrollPane(areaPantalla), BorderLayout.CENTER); setSize( 300,150 ); //establece el tamañode laventana setVisible( true );//muestralaventana } //findel constructorde Servidor // establece yejecutael servidor publicvoidejecutarServidor() { try //establece el servidorparaque recibaconexiones;procesalasconexiones { servidor= newServerSocket(12345, 100 ); // crea objetoServerSocket while ( true ) { try { esperarConexion();//esperaunaconexión obtenerFlujos();//obtiene losflujosde entradaysalida
  • 13. procesarConexion();//procesalaconexión } //finde try catch ( EOFExceptionexcepcionEOF) { mostrarMensaje( "nServidorterminolaconexion"); } //finde catch finally { cerrarConexion();//cierralaconexión contador++; } //finde finally } //finde while } //finde try catch ( IOExceptionexepcionES) { exepcionES.printStackTrace(); } //finde catch } //findel métodoejecutarServidor // esperaaque llegue unaconexión,despuésmuestrainformaciónsobre ésta private voidesperarConexion() throwsIOException { mostrarMensaje( "Esperandounaconexionn"); conexion=servidor.accept();//permite al servidoraceptarlaconexión mostrarMensaje( "Conexion"+contador+ " recibidade:"+ conexion.getInetAddress().getHostName() ); } //findel métodoesperarConexion // obtiene flujosparaenviaryrecibirdatos
  • 14. private voidobtenerFlujos()throwsIOException { // establece el flujode salidaparalosobjetos salida= new ObjectOutputStream( conexion.getOutputStream() ); salida.flush();//vacíael búferde salidapara enviarinformacióndelencabezado // establece el flujode entradaparalosobjetos entrada= new ObjectInputStream(conexion.getInputStream() ); mostrarMensaje( "nSeobtuvieronlosflujosde E/Sn"); } //findel métodoobtenerFlujos // procesalaconexiónconel cliente private voidprocesarConexion() throwsIOException { Stringmensaje ="Conexionexitosa"; enviarDatos( mensaje );//envíamensaje de conexiónexitosa // habilitacampoIntroducirparaque el usuariodel servidorpuedaenviarmensajes setTextFieldEditable( true ); do// procesalosmensajes enviadosdesde el cliente { try //lee el mensaje ylomuestraenpantalla { mensaje =( String) entrada.readObject();//lee el nuevomensaje mostrarMensaje( "n"+mensaje );//muestrael mensaje } //finde try catch ( ClassNotFoundExceptionexcepcionClaseNoEncontrada)
  • 15. { mostrarMensaje( "nSerecibiountipode objetodesconocido"); } //finde catch } while ( !mensaje.equals("CLIENTE>>>TERMINAR") ); } //findel métodoprocesarConexion // cierraflujosysocket private voidcerrarConexion() { mostrarMensaje( "nTerminandoconexionn"); setTextFieldEditable( false);//deshabilitacampoIntroducir try { salida.close();//cierraflujode salida entrada.close();//cierraflujode entrada conexion.close();//cierrael socket } //finde try catch ( IOExceptionexepcionES) { exepcionES.printStackTrace(); } //finde catch } //findel métodocerrarConexion // envíael mensaje al cliente private voidenviarDatos( Stringmensaje ) { try //envía objetoal cliente
  • 16. { salida.writeObject( "SERVIDOR>>>"+ mensaje ); salida.flush();//envíatodalasalidaal cliente mostrarMensaje( "nSERVIDOR>>>" + mensaje ); } //finde try catch ( IOExceptionexepcionES) { areaPantalla.append( "nErroral escribirobjeto"); } //finde catch } //findel métodoenviarDatos // manipulaareaPantallaenel subprocesodespachadorde eventos private voidmostrarMensaje( finalStringmensajeAMostrar) { SwingUtilities.invokeLater( new Runnable() { publicvoidrun() //actualizaareaPantalla { areaPantalla.append( mensajeAMostrar);//adjuntael mensaje } //findel métodorun } //finde la clase internaanónima );// finde la llamadaa SwingUtilities.invokeLater } //findel métodomostrarMensaje // manipulaacampoIntroducirenel subprocesodespachadorde eventos private voidsetTextFieldEditable(finalbooleaneditable ) { SwingUtilities.invokeLater(
  • 17. new Runnable() { publicvoidrun() //establece lapropiedadde ediciónde campoIntroducir { campoIntroducir.setEditable( editable); } //findel método } //finde la clase interna );// finde la llamadaa SwingUtilities.invokeLater } //findel métodosetTextFieldEditable } //finde la clase Servidor