Sei sulla pagina 1di 6

CONCURRENCIA DE PROCESOS

ACTIVIDAD APLICATIVA COLABORATIVA

Manejo de sockets e hilos en C++ o Java


Cuestiones y ejercicios
Para reforzar y ampliar lo visto en esta Unidad, se proponen varias cuestiones y ejercicios prcticos que
los estudiantes debern resolver. Para la resolucin de esta prctica, el estudiante tiene la posibilidad de
elegir entre dos lenguajes de programacin: C++ o Java.
El estudiante debe entregar una memoria donde vendrn resueltos y comentados las diferentes
cuestiones y problemas encontrados en la realizacin tanto del Taller, como del ejercicio3. La
calificacin se realizar en funcin de la memoria realizada y la correcta ejecucin del cdigo de cada
una de las cuestiones, debidamente comentado.
1.

Analiza el cdigo que se ofrece en el Anexo 1: Qu ocurre cuando varios clientes, al mismo
tiempo, intentan contactar con el Servidor de Tiempo?

2.

Resolver problema: soluciona el problema visto en el punto 1, realizando el cdigo en C++ o


Java para el servidor y comenta la solucin propuesta (en la memoria hay que adjuntar el
cdigo como parte de la solucin). Como ayuda dispone del anexo 2.

3.

Realiza un programa que permita a varios usuarios (Clientes) escribir contenido en su pantalla.
Mientras, en la pantalla del servidor, la cual se puede ejecutar en otra mquina, debe aparecer
toda la informacin que los clientes estn escribiendo. Se debe detallar: nombre del cliente y
hora por cada mensaje de texto que el cliente escriba.
La demostracin de la prctica se realizar teniendo clientes y servidor en maquinas distintas.

NOTAS:

Pueden existir varios clientes atacando a un solo servidor.

Las prcticas se realizarn de manera individual, la deteccin de copia supondr un 0 en la


prctica, debiendo realizar una prctica adicional en el Final.

El estudiante puede elegir el lenguaje de programacin a utilizar para resolver las cuestiones
entre C++ o Java. En caso de utilizar Java, se ofrece un pequeo tutorial para introducirse en el
mundo java, en el apartado Introduccin a la programacin en Java

CONCURRENCIA DE PROCESOS
ACTIVIDAD APLICATIVA COLABORATIVA

Introduccin a la programacin en Java


Java es un lenguaje orientado a objetos, por lo que construiremos nuestros programas a base de clases
(que contienen mtodos y atributos) Java que podrn referenciarse entre ellas. Un ejemplo bsico de
una clase java puede ser el siguiente:

Para poder ejecutar un programa en java, debe existir una clase principal que implemente el mtodo
main y sea la que se encargue de hacer que el resto cumplan su misin. Valga como ejemplo:

Este ejemplo solo imprime "Hola Mundo!" por pantalla, pero sirve como base para entender cmo
hacer un programa ejecutable.

CONCURRENCIA DE PROCESOS
ACTIVIDAD APLICATIVA COLABORATIVA

Anexo 1: programacin de sockets en Java


Crear un socket en java es realmente muy sencillo. Basta con crearse un objeto de la clase socket (en el
javadoc podis ver multitud de constructores para poder crearlo a partir de diversos datos) y listo. Para
poder enviar informacin a travs del socket, basta con invocar al mtodo getOutputStream() del
socket, que nos devolver un OutputStream a travs del cual escribiremos los datos como si fueran a ir a
parar a cualquier otro dispositivo (fichero, pantalla, etc.). Si lo que queremos es recibir datos a partir del
socket, basta con invocar al mtodo getInputStream() que nos dar un InputStream con el que
operaremos como si fuera cualquier otro dispositivo de entrada.
Ahora bien, cundo creamos un socket, estamos siendo nosotros los que tomamos la iniciativa para
conectarnos a algn sitio, pero ese sitio tiene que estar preparado para aceptar conexiones. En java esto
lo podemos hacer fcilmente a partir de un ServerSocket. Para crearnos uno, invocamos a alguno de sus
constructores, y luego usamos el mtodo accept() del objeto creado que se quedar parado hasta que
llegue alguna conexin, momento en el que nos devolver un socket a travs del cual realizar la
comunicacin con la otra mquina.
Tomando como referencia la arquitectura Cliente/Servidor, para montar un servidor necesitaremos un
ServerSocket, mientras que para el cliente simplemente necesitaremos un socket. Veamos un ejemplo,
un servidor que ofrece la hora actual (la hora para el servidor) a cada cliente que se la pida, y un cliente
que pide la hora al servidor y la imprime por pantalla.
NOTA:

Se pueden consultar las siguientes fuentes para ampliar informacin:


o

Socket:

<http://docs.oracle.com/javase/1.5.0/docs/api/java/net/Socket.html>

[Consulta: 07/2012]
o

OutputStream:

<

http://docs.oracle.com/javase/1.5.0/docs/api/java/io/OutputStream.html> [Consulta:
07/2012]
o

InputStream:
<http://docs.oracle.com/javase/1.5.0/docs/api/java/io/InputStream.html> [Consulta:
07/2012]

ServerSocket:
<http://docs.oracle.com/javase/1.5.0/docs/api/java/net/ServerSocket.html>
[Consulta: 07/2012]

CONCURRENCIA DE PROCESOS
ACTIVIDAD APLICATIVA COLABORATIVA

Cliente

Servidor

CONCURRENCIA DE PROCESOS
ACTIVIDAD APLICATIVA COLABORATIVA

Programacin de hilos en Java


Los hilos permiten aumentar la eficiencia de los programas al dejarnos realizar varias tareas de forma
simultnea. Existen dos formas de crear hilos en Java, la primera es heredando de la clase Thread e
implementando a nuestro gusto el mtodo run. La segunda es mediante la implementacin de la
interfaz Runnable e implementando, tambin, el mtodo run. Para que el hilo se ejecute como hilo, hay
que invocarlo mediante el mtodo start, si se invoca mediante el mtodo run se har que se ejecute ese
mtodo mediante una invocacin normal y el resto del programa no seguir ejecutndose hasta que el
mtodo run haya acabado su ejecucin.
Sirva como ejemplo para esta parte un programa que genera dos listas aleatorias de nmeros enteros y
lanza dos hilos que van sumando dichas listas en paralelo.
NOTA:

Se pueden consultar las siguientes fuentes para ampliar informacin:


o

Thread:

<http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Thread.html>

[Consulta: 07/2012]
o

Runnable:

<http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Runnable.html>

[Consulta: 07/2012]

CONCURRENCIA DE PROCESOS
ACTIVIDAD APLICATIVA COLABORATIVA

Todos los derechos de propiedad intelectual de esta obra pertenecen en exclusiva a la Universidad Europea
de Madrid, S.L.U. Queda terminantemente prohibida la reproduccin, puesta a disposicin del pblico y en
general cualquier otra forma de explotacin de toda o parte de la misma.
La utilizacin no autorizada de esta obra, as como los perjuicios ocasionados en los derechos de propiedad
intelectual e industrial de la Universidad Europea de Madrid, S.L.U., darn lugar al ejercicio de las acciones
que legalmente le correspondan y, en su caso, a las responsabilidades que de dicho ejercicio se deriven.

Potrebbero piacerti anche