1008

Capítulo 24 Redes

 1 

// Fig. 24.6: PruebaServidor.java

2

// Prueba la aplicación Servidor.

3

import

 javax.swing.JFrame;

 4
 5 

public class

 PruebaServidor

 6 

{

 7  

public static void

 main( String args[] )

 8  

{

 9   

Servidor aplicacion = 

new

 Servidor(); 

// crea el servidor

10   

aplicacion.setDefaultCloseOperation(

JFrame.EXIT_ON_CLOSE

 );

 11  

 

aplicacion.ejecutarServidor();

// ejecuta la aplicación servidor

12

}

// fin de main

13

}

// fin de la clase PruebaServidor

Figura 24.6

  |  Clase de prueba para 

Servidor

.

obtenerFlujos

 (declarado en las líneas 99 a 109) para obtener las referencias a los fl ujos para la conexión. En 

la línea 70 se hace una llamada al método 

procesarConexion

 (declarado en las líneas 112 a 133) para enviar 

el mensaje de conexión inicial al cliente, y para procesar todos los mensajes que se reciban del cliente. El bloque 

finally

 (líneas 76 a 80) fi naliza la conexión del cliente llamando al método 

cerrarConexion

 (líneas 136 a 151), 

incluso aunque haya ocurrido una excepción. El método 

mostrarMensaje

(líneas 169 a 180) es llamado desde 

estos métodos para utilizar el subproceso despachador de eventos para mostrar los mensajes en el objeto 

JText-

Area

 de la aplicación. 

En el método 

esperarConexion

 (líneas 90 a 96) se utiliza el método 

accept

 de 

ServerSocket

 (línea 

93) para esperar una conexión de un cliente. Al ocurrir una conexión, el objeto 

Socket

 resultante se asigna 

a

conexion

. El método 

accept

 realiza un bloqueo hasta que se reciba una conexión (es decir, el subproceso 

en el que se haga la llamada a 

accept

 detiene su ejecución hasta que un cliente se conecte). En las líneas 94 y 95 se 

imprime en pantalla el nombre del equipo host que realizó la conexión. El método 

getInetAddress

de

Socket

devuelve un objeto 

InetAddress

 (paquete 

java.net

), el cual contiene información acerca del equipo cliente. 

El método 

getHostName

 de 

InetAddress

 devuelve el nombre de host del equipo cliente. Por ejemplo, hay una 

dirección IP (

127.0.0.1

) y nombre de host (

localhost

) especiales, que son útiles para probar aplicaciones de 

red en su equipo local [a ésta también se le conoce como 

dirección de bucle local

 (

loopback

)]. Si se hace una 

llamada a 

getHostName

 en un objeto 

InetAddress

 que contenga 

127.0.0.1

, el nombre de host correspondiente 

que devuelve el método es 

localhost

.

El método 

obtenerFlujos

 (líneas 99 a 109) obtiene las referencias a los fl ujos de 

Socket

 y los utiliza para

inicializar un objeto 

ObjectOutputStream

 (línea 102) y un objeto 

ObjectInputStream

(línea 106), respecti-

vamente. Observe la llamada al método 

flush

de

ObjectInputStream

 en la línea 103. Esta instrucción hace que 

el objeto 

ObjectOutputStream

 en el servidor envíe un 

encabezado de fl ujo

 al objeto 

ObjectInputStream

correspondiente del cliente. El encabezado de fl ujo contiene información como la versión de la serialización de 
objetos que se va a utilizar para enviar los objetos. Esta información es requerida por el objeto 

ObjectInput-

Stream

, para que pueda prepararse para recibir estos objetos de manera correcta.

Observación de ingeniería de software 24.5

Al utilizar un objeto 

ObjectOutputStream

 y un objeto 

ObjectInputStream

 para enviar y recibir datos a través 

de una conexión de red, siempre debe crear primero el objeto 

ObjectOutputStream

 y vaciar (mediante el método 

flush

) el fl ujo, de manera que el objeto 

ObjectInputStream

 pueda prepararse para recibir los datos. Esto se requiere 

sólo en las aplicaciones de red que se comunican utilizando a 

ObjectOutputStream

 y 

ObjectInputStream

.

Tip de rendimiento 24.3

Por lo general, los componentes de entrada y salida de una computadora son mucho más lentos que su memoria. 
Los búferes de salida se utilizan comúnmente para incrementar la efi ciencia de una aplicación, al enviar mayores 
cantidades de datos con menos frecuencia, con lo cual se reduce el número de veces que una aplicación accede a los 
componentes de entrada y salida de la computadora.

24_MAQ_CAP_24_Deiltel.indd1008

4/19/081:34:52AM