Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1.
Objetivos
En esta pr
actica se usar
a Java para introducir conceptos basicos de comunicacion
sncrona en programas distribuidos, en concreto los objetivos de esta practica
son:
Implementaci
on de la comunicacion entre un cliente y servidor basandose
en el protocolo TCP en Java.
Manejar el API y la documentacion de Java para encontrar la informacion
necesaria.
El entorno de desarrollo a utilizar sera JDK 1.7.
2.
Contenidos
En esta secci
on se presenta el problema objeto de esta practica y se establecen
los ejercicios a realizar. La pr
actica consta de tres ejercicios. Para la realizacion
del segundo ejercicio es necesario haber comprendido y probado el primer
ejercicio.
2.1.
La abstracci
on de socket y el modelo cliente/servidor
Programaci
on de Sistemas Concurrentes y Distribuidos, curso 14-15
La comunicaci
on entre los procesos cliente y servidor tiene lugar a traves
de la abstracci
on denominada com
unmente socket. Los sockets representan los
extremos de la conexi
on que se establece para llevar a cabo esta comunicacion.
Cuando dos procesos requieren comunicarse solicitan al sistema operativo la
creaci
on de un socket. La respuesta a esta solicitud es un identificador que
permite al proceso hacer referencia al nuevo socket creado. Atendiendo a la pila
de protocolos de Internet existen dos tipos de sockets:
Sockets orientados a comunicacion sncrona. El uso de este tipo de sockets
proporciona una transmision bidireccional, continua y fiable (los datos se
comunican ordenados y sin duplicados) con conexion mediante el protocolo
TCP (Transport Control Protocol). En Java este tipo de sockets se
implementan mediante las clases java.net.Socket y java.net.ServerSocket.
Sockets orientados a comunicacion asncrona. El uso de este tipo de sockets
proporciona una transmision bidireccional, no fiable, de longitud maxima
prefijada y sin conexi
on mediante el protocolo UDP (User Datagram
Protocol). En Java este tipo de sockets se implementa mediante la clase
java.net.DatagramSocket.
Ambos tipos de sockets tienen asociados un objeto java.io.OutputStream y
un objeto java.io.InputStream mediante los cuales puede emitir y recibir cadenas
de bytes, respectivamente.
En esta pr
actica nos centramos en comunicacion sncrona entre procesos
cliente y servidor. Por tanto trabajaremos con las clases java.net.Socket y
java.net.ServerSocket para el cliente y el servidor, respectivamente.
2.2.
Ejercicios obligatorios
A continuaci
on se describen los tres ejercicios requeridos en esta practica.
Ejercicio 1
El anexo I muestra un ejemplo de proceso servidor que escucha peticiones
de un cliente en un puerto especfico, mientras que el anexo II corresponde al
c
odigo de un cliente que usa dicho servicio. La instruccion
String SERVER_ADDRESS = " localhost " ;
Programaci
on de Sistemas Concurrentes y Distribuidos, curso 14-15
Programaci
on de Sistemas Concurrentes y Distribuidos, curso 14-15
3.
Entrega de la pr
actica
La pr
actica se realizar
a de forma individual. Cuando se finalice se debe
entregar un fichero comprimido practica 5 miNIP.tar (donde miNIP es el NIP
del autor de los ejercicios) con el siguiente contenido:
1. Un fichero de texto denominado autor.txt que contendra el NIP, los
apellidos y el nombre del autor de la practica en las primeras lneas del
fichero. Por ejemplo:
NIP
Apellidos
Nombre
-----------------------------------------------------345689
Rodr
guez Quintela
Sabela
Opcionalmente, a continuacion, se podra incluir en dicho fichero un
resumen de las principales dificultades encontradas durante la realizacion
de la pr
actica, y notas a considerar.
2. Un directorio denominado src, que contendra los ficheros fuente Java
utilizados en la implementacion de la practica. En el directorio habra un
subdirectorio por cada uno de los ejercicios que hay que entregar en
la presente pr
actica. Los subdirectorios que deben estar presentes son:
practica 5 1, practica 5 2 y practica 5 3.
3. Un fichero de texto para cada uno de los ejercicios incluidos en la practica
que contendr
a un una explicacion del comportamiento de los procesos
que se crean, de las comunicaciones que se establecen entre ellos en
cada ejercicio, de los resultados esperados, de los resultados obtenidos,
de las ventajas e inconvenientes de cada una de las soluciones, de los
posibles problemas que puedan surgir, etc. Cada uno de estos ficheros de
texto deber
a denominarse analisis X Y.txt (donde X Y indica el n
umero
de ejercicio) y contendra el analisis correspondiente al ejercicio X.Y
Los ficheros de texto que deben estar presentes son: analisis 5 1.txt,
analisis 5 2.txt y analisis 5 3.txt.
4. Un fichero ejecutable (shell script) para cada uno de los ejercicios
incluidos en la pr
actica. Cada uno de estos ficheros debera denominarse
compila ejX Y.sh (donde X Y indica el n
umero de ejercicio) y contendra las
instrucciones necesarias para compilar todos los ficheros fuentes Java
(ficheros con extensi
on .java) correspondientes al ejercicio X.Y Los
ficheros ejecutables que deben estar presentes son: compila ej5 1.sh,
compila ej5 2.sh y compila ej 5 3.sh.
5. Un directorio bin, que contendra las libreras necesarias para la ejecucion
de la pr
actica (en caso de emplear alguna librera no estandar) y los
ficheros compilados correspondientes a los ficheros fuente del directorio
src, es decir, en este directorio es donde depositan las clases compiladas
generadas por los ejecutables compilaX Y.sh.
6. Un fichero ejecutable (shell script) para cada uno de los ejercicios
incluidos en la pr
actica. Cada uno de estos ficheros debera denominarse
ejecuta ejX Y.sh (donde X Y indica el n
umero de ejercicio) y contendra las
Programaci
on de Sistemas Concurrentes y Distribuidos, curso 14-15
4.
Procedimiento
recomendaciones
de
correcci
on
Programaci
on de Sistemas Concurrentes y Distribuidos, curso 14-15
Anexo I: La clase
/*
* File :
* Author :
* Date :
* Coms :
*
*
*/
Servidor
Servidor . java
PSCD - Unizar
04/11/14
Programaci
o n de Sistemas Concurrentes y
Distribuidos Curso 2014 -2015.
Ejemplo de servidor con comunicaci
o n por sockets
java . io . IOException ;
java . net . Socket ;
java . net . ServerSocket ;
java . io . PrintWriter ;
java . io . BufferedReader ;
java . io . InputStreamReader ;
Programaci
on de Sistemas Concurrentes y Distribuidos, curso 14-15
new InputStreamReader (
clientSocket . getInputStream ()
)
);
} catch ( IOException e ) {
System . err . println ( e );
System . exit ( -1);
}
// Contar vocales de frases enviadas por el cliente
String inputLine = " " ;
try {
inputLine = entDesdeCliente . readLine ();
while (( inputLine != null )
&& (! inputLine . equals ( " END OF SERVICE " ))) {
// Calcular el n
u mero de vocales que
// tiene la respuesta .
String respuesta = " " + inputLine + " has " +
+ numeroDeVocales ( inputLine ) + " vowels " ;
// Enviar la respuesta al cliente
salHaciaCliente . println ( respuesta );
// Recibir nueva petici
o n del cliente
inputLine = entDesdeCliente . readLine ();
}
// Al cerrar cualquier canal de comunicaci
on
// usado por un socket , el socket se cierra .
// Para asegurarse que se env
n las respuestas que
// est
a en el buffer cerramos el OutputStream .
salHaciaCliente . close ();
// Cierra el servidor de sockets
serverSocket . close ();
} catch ( IOException e ) {
System . err . println ( e );
System . exit ( -1);
}
System . out . println ( " Bye , bye . " );
}
Programaci
on de Sistemas Concurrentes y Distribuidos, curso 14-15
File :
Author :
Date :
Coms :
Cliente
Cliente . java
PSCD - Unizar
04/11/14
Programaci
o n de Sistemas Concurrentes y
Distribuidos Curso 2014 -2015.
Programaci
on de Sistemas Concurrentes y Distribuidos, curso 14-15
*
Ejemplo de cliente con comunicaci
o n por sockets
*/
// package practica5 . ejercicio1 ;
import
import
import
import
import
import
java . io . IOException ;
java . net . Socket ;
java . net . UnknownHostException ;
java . io . PrintWriter ;
java . io . BufferedReader ;
java . io . InputStreamReader ;
// Ya hay conex
on
// Inicializaci
o n de los flujos de datos del socket
// para la comunicaci
o n con el servidor
PrintWriter can alSa lida AlSer vido r = null ;
BufferedReader ca n al En t ra d aD el S er v id or = null ;
try {
can alSa lida AlSer vido r = new PrintWriter (
socketAlServidor . getOutputStream () ,
true
);
c an al E nt r ad a De lS e rv i do r = new BufferedReader (
new InputStreamReader (
socketAlServidor . getInputStream ()
)
);
} catch ( IOException e ) { // abortar si hay problemas
System . err . println ( " I / O problem : " + SERVER_ADDRESS );
Programaci
on de Sistemas Concurrentes y Distribuidos, curso 14-15
10
Programaci
on de Sistemas Concurrentes y Distribuidos, curso 14-15
11