Práctica 1

Anuncio
Fecha de efectividad: __________________
UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA
FACULTAD DE INGENIERÍA (UNIDAD MEXICALI)
DOCUMENTO DEL SISTEMA DE CALIDAD
Formato para prácticas de laboratorio
CARRERA
PLAN DE
ESTUDIO
CLAVE
ASIGNATURA
NOMBRE DE LA ASIGNATURA
LSC
2009-2
11998
Base de Datos Distribuidas
PRÁCTICA
No.
1
LABORATORIO
DE
NOMBRE DE LA
PRÁCTICA
Base de Datos Distribuidas
DURACIÓN
(HORA)
Cliente/Servidor_Socket
2
1. INTRODUCCIÓN
EL Origen de los socket tuvo lugar en una variante del sistema operativo Unix conocida como BSD Unix. En la
universidad de Berkeley, en los inicios del Internet, pronto se hizo evidente que los programadores necesitarían un medio
sencillo y eficaz para escribir programas capaces de intercomunicarse entre sí. Esta necesidad dio origen a la primera
especificación e implementación de sockets. Cliente-Servidor es el modelo que actualmente domina el ámbito de
comunicación, ya que descentraliza los procesos y los recursos. Es un Sistema donde el cliente es una aplicación, en un
equipo, que solicita un determinado servicio y existe un software, en otro equipo, que lo proporciona.
Los servicios pueden ser:
1. Ejecución de un programa
2. Acceso a una Base de Datos
3. Acceso a un dispositivo de hardware.
2. OBJETIVO (COMPETENCIA)
El alumno adquirirá conocimientos de la arquitectura y modelo de aplicación distribuida cliente/servidor, para su
desarrollo y ejecución.
Formuló
Revisó
Aprobó
Lissethe G.
Lamadrid López
Ing. Josefina Mariscal
Camacho
Maestro
Coordinador de la
Carrera
Autorizó
David Isaías Rosas
Almeida
Gestión de la Calidad
Página 1 de 8
Director de la Facultad
Código
Revisión
GC-N4-017 .
1
.
Fecha de efectividad: __________________
UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA
FACULTAD DE INGENIERÍA (UNIDAD MEXICALI)
DOCUMENTO DEL SISTEMA DE CALIDAD
Formato para prácticas de laboratorio
3. FUNDAMENTO
Definición de Socket
Designa un concepto abstracto por el cual dos programas (posiblemente situados en computadoras distintas) pueden
intercambiarse cualquier flujo de datos, generalmente de manera fiable y ordenada.
Los sockets proporcionan una comunicación de dos vías, punto a punto entre dos procesos. Los sockets son muy
versátiles y son un componente básico de comunicación entre interprocesos e intersistemas. Un socket es un punto final
de comunicación al cual se puede asociar un nombre.
Para lograr tener un socket es necesario que se cumplan ciertos requisitos
1. Que un programa sea capaz de localizar al otro.
2. Que ambos programas sean capaces de intercambiarse información.
Por lo que son necesarios tres recursos que originan el concepto de socket
 Un protocolo de comunicaciones, que permite el intercambio de octetos.
 Una dirección del Protocolo de Red (Dirección IP, si se utiliza el Protocolo TCP/IP), que identifica una
computadora.
 Un número de puerto, que identifica a un programa dentro de una computadora. Con un socket se logra
implementar una arquitectura cliente-servidor. la comunicación es iniciada por uno de los programas (cliente).
Mientras el segundo programa espera a que el otro inicie la comunicación (servidor). Un Socket es un archivo
existente en el cliente y en el servidor.
¿Cómo funciona?
Normalmente, un servidor funciona en una computadora específica usando un socket con un número de puerto
específico. El cliente conoce el nombre de la maquina (hostname) o el IP, en la cual el servidor está funcionando y el
número del puerto con el servidor está conectado.
Si el cliente lanza una demanda de conexión y el servidor acepta la conexión, este abre un socket en un puerto diferente,
para que pueda continuar escuchando en el puerto original nuevas peticiones de conexión, mientras que atiende a las
peticiones del cliente conectado. El cliente y el servidor pueden ahora comunicarse escribiendo o leyendo en sus
respectivos sockets.
Página 2 de 8
Código
Revisión
GC-N4-017 .
1
.
Fecha de efectividad: __________________
UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA
FACULTAD DE INGENIERÍA (UNIDAD MEXICALI)
DOCUMENTO DEL SISTEMA DE CALIDAD
Formato para prácticas de laboratorio
Los tipos de socket definen las propiedades de comunicación visibles para la aplicación. Los procesos se comunican
solamente entre los sockets del mismo tipo. Existen cinco tipos de sockets.
El Cliente actúa de la siguiente forma.
1)
2)
3)
4)
5)
Establece una conexión con el servidor (Crea un socket con el servidor).
Mandar mensajes al servidor o Esperar un mensaje de él.(Consultas)
Esperar su respuesta o contestarle (existen casos en que este paso no es necesario).
Repetir los pasos 2 y 3 mientras sea necesario.
Cerrar la conexión con el servidor.
El servidor actúa así.
1) Inicializa un puerto de comunicación, en espera de clientes que intenten conectarse a él (Crea un serverSocket).
2) Una vez que se conecta alguien, crea un hilo de ejecución para este usuario mientras que el thread principal
vuelve al paso 1. Esto comúnmente se hace para que el servidor puede atender a varios clientes al mismo
tiempo.
3) Se comunica con el cliente mediante el socket creado entre el cliente y él.
4) Espera que el cliente se vaya o lo bota el mismo servidor (Cierra el socket entre ellos) y elimina el thread de
comunicación entre ellos.
Implementando un socket en java
En un programa Cliente-Servidor un socket nos ayuda a representar las conexiones entre un programa cliente y uno
servidor. En el lado del cliente se utiliza la clase Socket y en el del servidor el Server Socket para representar dichas
conexiones.
Página 3 de 8
Código
Revisión
GC-N4-017 .
1
.
Fecha de efectividad: __________________
UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA
FACULTAD DE INGENIERÍA (UNIDAD MEXICALI)
DOCUMENTO DEL SISTEMA DE CALIDAD
Formato para prácticas de laboratorio
POGRAMA CLIENTE
El programa cliente se conecta a un servidor indicando el nombre de la máquina y el número puerto (tipo de servicio que
solicita) en el que el servidor está instalado. Una vez conectado, lee una cadena del servidor y la escribe en la pantalla:
import java.io.*; import java.net.*; class Cliente
{
static final String HOST = “localhost”;
static final int PUERTO=5000;
public Cliente( )
{
try
{
Socket skCliente = new Socket( HOST , Puerto );
Input Stream aux = skCliente.getInputStream();
Data Input Stream flujo = new Data Input Stream( aux );
System.out.println( flujo.readUTF() );
skCliente.close();
}
catch( Exception e )
{
System.out.println( e.getMessage() );
}
}
public static void main( String[] arg )
{
new Cliente();
}
}
En primer lugar se crea el Socket denominado skCliente, al que se le especifican el nombre de host (HOST) y el número
de puerto (PORT). Luego se asocia el flujo de datos de dicho Socket (obtenido mediante getInputStream), que es
asociado a un flujo (flujo) Data Input Stream de lectura secuencial. De dicho flujo capturamos una cadena ( readUTF()), y
la imprimimos por pantalla (System.out). El Socket se cierra, una vez finalizadas las operaciones, mediante el método
close(). Debe observarse que se realiza una gestión de excepción para capturar los posibles fallos tanto de los flujos de
datos como del Socket.
Página 4 de 8
Código
Revisión
GC-N4-017 .
1
.
Fecha de efectividad: __________________
UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA
FACULTAD DE INGENIERÍA (UNIDAD MEXICALI)
DOCUMENTO DEL SISTEMA DE CALIDAD
Formato para prácticas de laboratorio
PROGRAMA SERVIDOR
El programa servidor se instala en un puerto determinado, a la espera de conexiones, a las que tratará mediante un
segundo SOCKET. Cada vez que se presenta un cliente, le saluda con una frase “Hola cliente N”. Este servidor sólo
atenderá hasta tres clientes, y después finalizará su ejecución, pero es habitual utilizar ciclos infinitos (while(true)) en los
servidores, para que atiendan llamadas continuamente. Tras atender cuatro clientes, el servidor deja de ofrecer su
servicio:
import java.io.* ; import java.net.* ; class Servidor
{
static final int PUERTO=5000;
public Servidor( )
{
try
{
Server Socket skServidor = new Server Socket( PUERTO );
System.out.println(“Escucho el puerto “ + PUERTO );
for ( int numCli = 0; numCli < 3; numCli++; ) {
Socket skCliente = skServidor.accept(); // Crea objeto
System.out.println(“Sirvo al cliente “ + numCli);
Output Stream aux = skCliente.getOutputStream();
Data Output Stream flujo= new Data Output Stream( aux );
flujo.writeUTF( “Hola cliente “ + numCli );
skCliente.close();
} // Cierra while
System.out.println(“Demasiados clientes por hoy”);
}
catch( Exception e )
{
System.out.println( e.getMessage() );
}
}
public static void main( String[] arg ) {
new Servidor();
}
}
Utiliza un objeto de la clase Server Socket (skServidor), que sirve para esperar las conexiones en un puerto determinado
(PUERTO), y un objeto de la clase Socket (skCliente) que sirve para gestionar una conexión con cada cliente. Mediante
un ciclo for y la variable numCli se restringe el número de clientes a tres, con lo que cada vez que en el puerto de este
servidor aparezca un cliente, se atiende y se incrementa el contador.
Página 5 de 8
Código
Revisión
GC-N4-017 .
1
.
Fecha de efectividad: __________________
UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA
FACULTAD DE INGENIERÍA (UNIDAD MEXICALI)
DOCUMENTO DEL SISTEMA DE CALIDAD
Formato para prácticas de laboratorio
Para atender a los clientes se utiliza la primitiva accept() de la clase Server Socket, que es una rutina que crea un nuevo
Socket (skCliente) para atender a un cliente que se ha conectado a ese servidor. Se asocia al socket creado (skCliente)
un flujo (flujo) de salida Data Output Stream de escritura secuencial, en el que se escribe el mensaje a enviar al cliente.
El tratamiento de las excepciones es muy reducido en nuestro ejemplo, tan solo se captura e imprime el mensaje que
incluye la excepción mediante getMessage().
4. PROCEDIMIENTO (DESCRIPCIÓN)
A)
EQUIPO NECESARIO



MATERIAL DE APOYO
Computadora
IDE
JDK
B)
DESARROLLO DE LA PRÁCTICA
Sockets usando TCP (Streams)
1. Se entrega a usted el código fuente de un ejemplo sencillo sobre comunicación entre procesos usando sockets con el
protocolo TCP.
Código del lado cliente
Página 6 de 8
Código
Revisión
GC-N4-017 .
1
.
Fecha de efectividad: __________________
UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA
FACULTAD DE INGENIERÍA (UNIDAD MEXICALI)
DOCUMENTO DEL SISTEMA DE CALIDAD
Formato para prácticas de laboratorio
Código del lado servidor
Se le solicita:
1) Documentar el código línea a línea indicando que se instruye a la máquina en cada una de ellas.
2) Compilar y ejecutar el proceso servidor en una máquina y el proceso cliente en otra máquina; logrando obtener el
resultado esperado de acuerdo a lo explicado por el docente en la sesión de clase. Debe presentar, en la
siguiente sesión, la ejecución lograda a su profesor de la asignatura y contestar a las preguntas que éste le haga
sobre el proceso seguido por usted(es) para lograr el resultado.
3) La frase a utilizar para que el servidor responda repitiéndola será: Esta frase va desde el cliente al servidor y
regresa, es un servidor ECO.
Página 7 de 8
Código
Revisión
GC-N4-017 .
1
.
Fecha de efectividad: __________________
UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA
FACULTAD DE INGENIERÍA (UNIDAD MEXICALI)
DOCUMENTO DEL SISTEMA DE CALIDAD
Formato para prácticas de laboratorio
C)
CÁLCULOS Y REPORTE
5. RESULTADOS Y CONCLUSIONES
Se generara una aplicación del modelo cliente servidor de 2 fases.
6. ANEXOS
7. REFERENCIAS
Página 8 de 8
Código
Revisión
GC-N4-017 .
1
.
Descargar