Download Beep Generator

Document related concepts
no text concepts found
Transcript
1.- Beep Generador - Java RMI
El objetivo de este ejercicio es producir un programa cliente-servidor basado en el
mecanismo Java Remote Method Invocation (RMI). El servidor debe soportar un servicio
de generación de sonidos que puede emitir un cierto número de “beeps” cada vez que
reciba la invocación de un cliente. Tanto el cliente como el servidor serán escritos en
Java.
Desarrollo de la aplicación
Para el desarrollo del sistema descrito siga las siguientes instrucciones:
1.- Definición de la Interfaz – Defina la interfaz BeepGenerator en Java, la cual debe
ser subclase de la interfaz java.rmi.Remote. Esta interfaz debe declarar el método
emitBeep y su parámetro, de manera que sea accesible para los clientes. El parámetro
debe indicar el número de beeps que se solicitan. Recuerde que todos los métodos
remotos incluidos en una interfaz remota deben incluir la excepción
java.rmi.RemoteException.
2.- Implementación del servidor.- Implemente la aplicación BeepServer que crea una
instancia de sí mismo y la registra en el “RMI registry”. El servant debe proveer una
implementación para el método emitBeep que emite el número solicitado de “beeps”.
Sugerencia: puede utilizar el método java.awt.Toolkit.beep() para generar el sonido ó
bien imprimir un mensaje que sustituya al “beep” si utiliza una máquina sin sonido.
3.- Generación de stub/skeleton.- Use la herramienta rmic para generar el código del
stub y del skeleton a partir del servidor compilado BeepServer.
4.- Security Policy – El modelo de seguridad de java requiere la presencia de un archivo
de políticas de seguridad para definir la autorización de las acciones de las aplicaciones.
Para este ejemplo puede utilizar un archivo con el contenido siguiente:
grant {permission java.security.AllPermission;};
Esta instrucción garantiza acceso total a las aplicaciones y solo debe utilizarse con fines
de prueba.
5.- Implementación del cliente.- Implemente la aplicación BeepClient la cual debe
primero obtener una referencia del objeto servidor BeepGenerator vía el “RMI registry”.
Enseguida debe invocar el método emitBeep solicitando un cierto número de “beeps”.
6.- Ejecute la aplicación.- Ejecute primero el comando rmiregistry para iniciar el
servicio de nombres, ejecute después el servidor y finalmente ejecute el cliente.
2.- Sum
El objetivo de este ejercicio es producir un programa cliente-servidor basado en el
mecanismo Java Remote Method Invocation (RMI). El servidor ofrece el servicio de
sumar 2 números enteros y regresa el resultado al cliente.
3.- Count
Con el objetivo de evaluar el desempeño de RMI se desea implementar un servidor
simple. El servidor exporta un método que se llama increment () el cual solamente
incrementa en 1 el valor de una variable de tipo int llamada sum y regresa el resultado al
cliente. El servidor tiene otros 2 métodos, uno para leer y otro para modificar el valor de
la variable sum. El cliente debe:
1) Inicializar a cero el valor de sum
2) Invocar 1000 veces el método increment ()
3) Desplegar el valor final de sum y el tiempo promedio de
respuesta.
4.- Power Service
El objetivo es implementar un servicio con 2 métodos. Uno llamado square que calcula el
cuadrado de un número entero dado y otro llamado power que eleva un número entero a
cualquier potencia entera y regresa el resultado al cliente. Sugerencia, para elevar un
número a una determinada potencia utilice la clase “BigInteger” o la clase “Math”.
5.- Factorial
Programar un servidor RMI al cual los clientes puedan pasarle un número de tipo “long”
y obtener en respuesta el factorial del número (de tipo “long”).
6.- LightBulb
Escriba un programa servidor para el control de un foco. Los clientes deben poder
encender y apagar el foco y preguntar su estado actual.
8.- Time Stamp
Construya un servidor RMI que regrese al cliente la fecha y la hora de la invocación.
9.- Calculadora
Construya un servidor que soporte las 4 operaciones aritméticas (suma, resta,
multiplicación y división) manipulando variables de tipo long y regresando a los clientes
un resultado de ese mismo tipo.
10.- Message
El objetivo del ejercicio es crear un servidor al que los clientes se puedan conectar para
enviar mensajes. Los mensajes incluyen el nombre del remitente y un texto. Al recibir la
invocación el servidor imprime una línea con el siguiente formato “nombre: mensaje”.
Resultando en una secuencia como la que se indica:
Juan: Hola
Pepe: Hola, ¿Qué tal?
Juan: Bien,….
11.- Banco
Construya un servidor bancario simple. Suponga que solo hay un cliente que inicialmente
tiene un balance cero y puede hacer depósitos y retiros (siempre y cuando el balance lo
permita)
12.- Estadísticas I
Diseñar un servidor de estadísticas de fútbol americano que responda a los clientes que se
conecten la cantidad de yardas ganadas por tierra (running), la cantidad de yardas
ganadas por pases (passing) y el número de intercambios de balón por error (turnover).
(Los métodos requieren un String con el nombre del equipo y los resultados que regresan
son enteros).
13.- Buffer Productor-Consumidor
Construir un servidor para almacenar mensajes. Existen 2 tipos de clientes: Productor
que envía mensajes al servidor invocando la operación send y Consumidor que descarga
los mensajes del servidor invocando la operación receive. Las operaciones deben ser nobloqueantes es decir, siempre regresan inmediatamente. Las operaciones de envío
siempre son exitosas y las de recepción reciben un mensaje o “null” si el buffer está vacío
pero en todo caso terminan inmediatamente. Para hacer el buffer de propósito general, el
tipo de mensajes será “Object” así se puede envira cualquier tipo de datos.
14.- Login
Implementar un servidor que guarde en una base de datos las cuentas y passwords de un
sistema. Los clientes se conectan al servidor vía RMI y le proporcionan su cuenta y
passord y el servidor los compara con los registros de la base de datos, dependiendo del
resultado de la comparación el servidor responde autorizando ó no el acceso.
15.- Pizza a domicilio
Diseñar un sistema cliente/servidor que permita a los clientes ordenar pizzas por
computadora. El cliente debe especificar el tamaño (personal, mediana, familiar,…), tipo
de pizza (pan, thin,…) y los ingredientes deseados así como también su nombre,
dirección y teléfono. El sistema le responde con el costo de la pizza calculado por el
servidor de acuerdo a las especificaciones de la pizza.
16.- Integral
Escriba un servidor que integre numéricamente funciones a la demanda de los clientes.
Los clientes deben enviar la función a integrar en forma de un objeto evaluable y
serializable que implemente la interfaz siguiente:
public interface Evaluatable {
public double evaluate(double value);
}
Por ejemplo:
class Square implements Evaluatable, Serializable {
public double evaluate(double val) {
return(val * val);
}
}
17.- Donativos
El ejemplo de los donativos consiste en una aplicación cliente-servidor de recolección de
donativos. La aplicación posee un servidor que se encarga de ir recogiendo los donativos
de los clientes y de ir acumulándolos. Los clientes, que interactúan con el servidor a
través de RMI, van realizando sus donaciones y pueden en todo momento consultar el
importe total acumulado.
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface IRecolector extends Remote
{
void recogerDonativo(Donativo d) throws RemoteException;
Donativo obtenerTotalAcumulado() throws RemoteException;
}
El donativo se envía encapsulando el valor del mismo en una clase “Donativo”, cuando
se pregunta por el total acumulado el servidor envía un objeto de la clase “Donativo”.
18.- Chat
Modifique el programa del ejercicio “Message” de manera que todos los clientes puedan
recibir e imprimir todos los mensajes. Pruebe el sistema ejecutando el servidor y varios
clientes. Lo que escriba cualquiera de los clientes debe ser visto por todos los demás. El
servidor debe poder tomar la iniciativa de invocar a los clientes registrados mediante
“callback”.
19.- Temperatura
Un sistema de monitoreo de temperatura consiste en un servidor y varios clientes. El
servidor puede leer la temperatura indicada por un sensor, la temperatura puede cambiar
en cualquier momento. Los clientes interesados pueden invocar remotamente al servidor
para conocer la temperatura. Los clientes interesados en todos los cambios de
temperatura (en variaciones de 0.5 grados centígrados) podrían consultar repetidamente
la temperatura pero esto sería muy ineficiente ya que no se sabe cada cuando cambia la
temperatura. Un mejor esquema consiste en que los clientes interesados se registren y el
servidor les informe cada vez que cambie la temperatura. Sugerencia: Implemente el
servidor como un “thread” para que simule los cambios de temperatura y notifique a los
clientes registrados mediante “callback”.
20.- Estadísticas II
Agregar al ejemplo Estadísticas I:
1) La posibilidad de que un cliente se conecte para actualizar las estadísticas.
2) La posibilidad de que los clientes se registren y sean avisados automáticamente
cuando cambien las estadísticas