• No se han encontrado resultados

Código Fuente. Creamos en C:\ una carpeta para ubicar el código fuente del servidor. En mi caso, he creado una carpeta denominada rmi4

N/A
N/A
Protected

Academic year: 2021

Share "Código Fuente. Creamos en C:\ una carpeta para ubicar el código fuente del servidor. En mi caso, he creado una carpeta denominada rmi4"

Copied!
18
0
0

Texto completo

(1)

EL EJEMPLO

EL EJEMPLO

El proceso servidor provoca un eco

El proceso servidor provoca un eco

de la entrada de teclado enviada

de la entrada de teclado enviada

por el proceso cliente.

por el proceso cliente.

Por sencillez, ejecutaremos tanto el

Por sencillez, ejecutaremos tanto el

servidor como el cliente en la

servidor como el cliente en la

máquina local

máquina local

.

.

El sistema operativo es

El sistema operativo es

Windows

Windows

El

(2)

Código Fuente

Código Fuente

Creamos en

Creamos en C:C:\\ una carpeta para ubicar el una carpeta para ubicar el código fuente del servidor. En mi caso, he

código fuente del servidor. En mi caso, he

creado una carpeta denominada

creado una carpeta denominada rmi4rmi4

Para no mezclar el código del cliente, dentro de

Para no mezclar el código del cliente, dentro de

rmi4

rmi4, creo una carpeta a la que llamo , creo una carpeta a la que llamo clientecliente.. Utilizaremos

Utilizaremos dos ventanas de línea de dos ventanas de línea de comandos

comandos: una para las acciones sobre el : una para las acciones sobre el

código de servidor y otra para las operaciones

código de servidor y otra para las operaciones

del cliente.

(3)

Clases del servidor

Clases del servidor

Las ubicamos en la carpeta

Las ubicamos en la carpeta

c:

c:

\

\

rmi4

rmi4

Son:

Son:

EcoRMI.java

EcoRMI.java

(interfaz remota),

(interfaz remota),

EcoRMISirviente.java

EcoRMISirviente.java

(implementación de

(implementación de

la interfaz remota) y

la interfaz remota) y

EcoRMIServidor.java

EcoRMIServidor.java

(la aplicación remota)

(4)

EcoRMI.java

EcoRMI.java

public

public interfaceinterface EcoRMIEcoRMI extendsextends java.rmi.Remote

java.rmi.Remote {

{

public

public StringString eco(Stringeco(String mensaje) mensaje) throws

throws java.rmi.RemoteExceptionjava.rmi.RemoteException;; }

(5)

EcoRMISirviente.java

EcoRMISirviente.java

(1/2)

(1/2)

import

import java.rmijava.rmi.*; .*; import

import java.rmi.server.UnicastRemoteObjectjava.rmi.server.UnicastRemoteObject; ;

public

public classclass EcoRMISirvienteEcoRMISirviente extendsextends UnicastRemoteObjectUnicastRemoteObject implements

implements EcoRMIEcoRMI {

{

public

public EcoRMISirviente(StringEcoRMISirviente(String nombre) nombre) throwsthrows RemoteExceptionRemoteException { { super super(); (); try try { { Naming.rebind(nombre

Naming.rebind(nombre, , thisthis); ); }

} catchcatch ((ExceptionException e) { e) { System.out.println

System.out.println("("ExcepcionExcepcion: " + : " + e.getMessagee.getMessage()); ()); e.printStackTrace e.printStackTrace(); (); } } } }

(6)

public

public StringString eco(Stringeco(String mensaje) mensaje) throwsthrows RemoteException

RemoteException {

{

System.out.println

System.out.println("Recibido: " + mensaje); ("Recibido: " + mensaje); return

return mensaje; mensaje; } } } }

EcoRMISirviente.java

EcoRMISirviente.java

(2/2)

(2/2)

// Implementación del método remoto

(7)

import

import java.rmijava.rmi.*; .*; import

import java.rmi.serverjava.rmi.server.*; .*; public

public classclass EcoRMIServidorEcoRMIServidor {

{

public

public staticstatic voidvoid main(Stringmain(String argsargs[]) []) {

{

// Crea e instala el gestor de seguridad

// Crea e instala el gestor de seguridad

System.setSecurityManager(new

System.setSecurityManager(new RMISecurityManagerRMISecurityManager()); ()); try

try

{

{

EcoRMISirviente

EcoRMISirviente miEcomiEco = = newnew EcoRMISirviente

EcoRMISirviente("//:4000/mi("//:4000/mi--EcoRMIEcoRMI");"); System.out.println

System.out.println("Servidor de ("Servidor de EcoRMIEcoRMI listo."); listo."); }

} catchcatch ((ExceptionException e) { e) { System.out.println

System.out.println("("ExcepcionExcepcion: " + : " + e.getMessagee.getMessage()); ()); e.printStackTrace e.printStackTrace(); (); } } } } } }

EcoRMIServidor.java

EcoRMIServidor.java

(8)

java.policy

java.policy

En

En c:c:\\rmi4rmi4 (servidor) necesitamos un archivo de (servidor) necesitamos un archivo de política de seguridad

política de seguridad java.policyjava.policy. Lo más simple . Lo más simple es habilitar todos los permisos. También lo

es habilitar todos los permisos. También lo

necesita el cliente; no obstante, basta con darle

necesita el cliente; no obstante, basta con darle

la ruta en el momento de ejecutarlo

la ruta en el momento de ejecutarlo

posteriormente.

posteriormente.

grant

grant {{

permission

permission java.security.java.security.AllPermissionAllPermission;; };

(9)

Compilar en el servidor

Compilar en el servidor

Desde la línea de comandos,

Desde la línea de comandos,

compilamos todas las clases en

compilamos todas las clases en

c:

c:

\

\

rmi4

rmi4

(servidor):

(servidor):

„

„ >>cdcd c:c:\\rmi4rmi4

„

(10)

Generar

Generar

stub

stub

En la misma línea de comandos, generamos el

En la misma línea de comandos, generamos el

archivo de

archivo de stubstub::

„

„ c:c:\\rmi4rmi4>>rmicrmic EcoRMISirvienteEcoRMISirviente

Se genera un archivo llamado

Se genera un archivo llamado

EcoRMISirviente_stub.class

EcoRMISirviente_stub.class. Es . Es importanteimportante, , acordarse de copiarlo en la carpeta cliente.

acordarse de copiarlo en la carpeta cliente.

También debemos

También debemos copiar en la carpeta clientecopiar en la carpeta cliente los archivos

(11)

Clases en el cliente

Clases en el cliente

Además de los archivos

Además de los archivos

EcoRMISirviente.class

EcoRMISirviente.class, , EcoRMI.javaEcoRMI.java y y EcoRMI.class

EcoRMI.class que hemos copiado en que hemos copiado en pasos previos, debemos guardar en

pasos previos, debemos guardar en

c:

c:\\rmi4rmi4\\clientecliente el código fuente del cliente el código fuente del cliente al que denominaremos

al que denominaremos

EcoRMICliente.java EcoRMICliente.java

(12)

import

import java.iojava.io.*; .*; import

import java.rmijava.rmi.*; .*; import

import java.rmi.registryjava.rmi.registry.*; .*; import

import java.rmi.serverjava.rmi.server.*; .*; public

public classclass EcoRMIClienteEcoRMICliente {

{

public

public staticstatic voidvoid main(Stringmain(String argsargs[]) []) {

{

String

String mensajeEnviadomensajeEnviado; ; String

String mensajeRecibidomensajeRecibido; ; DataInputStream

DataInputStream dataIndataIn = = newnew DataInputStream(System.inDataInputStream(System.in); ); BufferedReader

BufferedReader in = in = new

new BufferedReader(newBufferedReader(new InputStreamReader(dataInInputStreamReader(dataIn)); )); // Crea e instala el gestor de seguridad

// Crea e instala el gestor de seguridad

System.setSecurityManager(new

System.setSecurityManager(new RMISecurityManagerRMISecurityManager()); ()); try

try {{

EcoRMICliente.java

(13)

EcoRMI

EcoRMI miEcomiEco = = ((EcoRMI)Naming.lookupEcoRMI)Naming.lookup("("rmirmi://" ://" +

+ argsargs[0] + ":4000/" + "mi[0] + ":4000/" + "mi--EcoRMIEcoRMI"); "); // hace un bucle hasta el fin de la entrada

// hace un bucle hasta el fin de la entrada

System.out.print

System.out.print("Eco> "); ("Eco> "); while

while ((((mensajeEnviadomensajeEnviado = = in.readLinein.readLine()) != ()) != nullnull) { ) { mensajeRecibido

mensajeRecibido = = miEco.eco(mensajeEnviadomiEco.eco(mensajeEnviado);); System.out.println(mensajeRecibido

System.out.println(mensajeRecibido); ); System.out.print

System.out.print("Eco> "); ("Eco> "); }

}

}

} catch(Exceptioncatch(Exception e) { e) { System.err.println

System.err.println("("ExcepcionExcepcion de Sistema: " + e); de Sistema: " + e); } } System.exit System.exit(0); (0); } } } }

EcoRMICliente.java

EcoRMICliente.java

(2/2)

(2/2)

(14)

Compilar el cliente

Compilar el cliente

Desde una nueva línea de comandos,

Desde una nueva línea de comandos,

compilamos la clase cliente en

compilamos la clase cliente en

c:

c:

\

\

rmi4

rmi4

\

\

cliente

cliente

:

:

„

„ >>cdcd c:c:\\rmi4rmi4\\clientecliente

„

(15)

Lanzar el

Lanzar el

rmiregistry

rmiregistry

Aprovechamos la línea de comandos en la que

Aprovechamos la línea de comandos en la que

compilamos las clases del servidor para lanzar

compilamos las clases del servidor para lanzar

el registro de RMI en el puerto 4000 (en mi

el registro de RMI en el puerto 4000 (en mi

caso, el puerto por defecto 1099 estaba

caso, el puerto por defecto 1099 estaba

ocupado y no lo podía usar). Es

ocupado y no lo podía usar). Es importanteimportante

advertir que ese es el puerto que he utilizado en

advertir que ese es el puerto que he utilizado en

el código de Servidor y del Cliente; si usaseis

el código de Servidor y del Cliente; si usaseis

otro deberíais cambiar también el código:

otro deberíais cambiar también el código:

„

„ c:c:\\rmi4rmi4>>startstart rmiregistryrmiregistry 40004000

(Debe abrirse una ventana de línea de

(Debe abrirse una ventana de línea de

comandos vacía y permanecer abierta. Si se

comandos vacía y permanecer abierta. Si se

cierra es que algo va mal)

(16)

Lanzar el servidor

Lanzar el servidor

Desde la misma línea de comandos en la

Desde la misma línea de comandos en la

que estoy ejecuto el servidor:

que estoy ejecuto el servidor:

„

(17)

Lanzar el cliente

Lanzar el cliente

Desde la misma línea de comandos en la

Desde la misma línea de comandos en la

que compilé la clase del cliente, ejecuto el

que compilé la clase del cliente, ejecuto el

proceso cliente:

proceso cliente:

„

„ c:\c:\rmi4rmi4\\clientecliente>java >java ––Djava.security.policyDjava.security.policy=file:///c:/rmi4/=file:///c:/rmi4/java.policyjava.policy

EcoRMICliente

(18)

La ejecución

La ejecución

Una vez lanzados todos los procesos sólo hay

Una vez lanzados todos los procesos sólo hay

que escribir algo en el

que escribir algo en el promptprompt de la ventana de de la ventana de comandos del cliente y observar cómo

comandos del cliente y observar cómo

efectivamente se produce el eco de lo escrito

efectivamente se produce el eco de lo escrito

en las dos ventanas

en las dos ventanas

Cliente Servidor

Referencias

Documento similar

– Utilizar la carpeta raíz estándar sin cambiar el nombre ni añadir palabras, fechas o números – Incluir cada documento en su carpeta. correspondiente borrando las

La "Fuente Correspondiente" de un trabajo en código objeto se refiere a todo código fuente necesario para generar, instalar, y (en el caso de trabajos ejecutables)

La licencia puede restringir la distribución de código fuente modificado sólo si se permite la distribución de “parches” con el código fuente con el propósito de modificar

Para los detalles concretos, tanto sobre el manuscrito como sobre las fuentes del texto, remito a F erraces r odríguez , Arsenio, «El glosario Agrestia et siluestria

En el fondo a Lévi-Strauss, como a Rousseau y como a todo el pensamiento ilustrado lo que le interesa no son los hombres sino el «Hombre», un hombre que se encuentra en

DS N° 012-2014-TR Registro Único de Información sobre accidentes de trabajo, incidentes peligrosos y enfermedades ocupacionales y modificación del art.110º del Reglamento de la Ley

El Programa de Mecenazgo organiza un concurso para "Amigos del IAC" en el cual podrán realizar una propuesta de observación para un telescopio robótico 1. Aquellas que

En tal postura confluye una matiza- ción iluminista que compromete el resultado de la participación ensanchada y de la afirmación de una concepción del poder que tiende a renovar