Está en la página 1de 18

EL EJEMPLO

El proceso servidor provoca un eco


de la entrada de teclado enviada
por el proceso cliente.
Por sencillez, ejecutaremos tanto el
servidor como el cliente en la
máquina local.
El sistema operativo es Windows
El jdk utilizado es 1.5.0
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

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


rmi4, creo una carpeta a la que llamo cliente.

Utilizaremos dos ventanas de línea de


comandos: una para las acciones sobre el
código de servidor y otra para las operaciones
del cliente.
Clases del servidor
Las ubicamos en la carpeta c:\rmi4

Son: EcoRMI.java (interfaz remota),


EcoRMISirviente.java (implementación de
la interfaz remota) y EcoRMIServidor.java
(la aplicación remota)
EcoRMI.java

public interface EcoRMI extends


java.rmi.Remote
{
public String eco(String mensaje)
throws java.rmi.RemoteException;
}
EcoRMISirviente.java (1/2)
import java.rmi.*;
import java.rmi.server.UnicastRemoteObject;

public class EcoRMISirviente extends UnicastRemoteObject


implements EcoRMI
{
public EcoRMISirviente(String nombre) throws RemoteException
{
super();
try
{
Naming.rebind(nombre, this);
} catch (Exception e) {
System.out.println("Excepcion: " + e.getMessage());
e.printStackTrace();
}
}
EcoRMISirviente.java (2/2)
// Implementación del método remoto
public String eco(String mensaje) throws
RemoteException
{
System.out.println("Recibido: " + mensaje);
return mensaje;
}
}
import java.rmi.*;
import java.rmi.server.*;
EcoRMIServidor.java
public class EcoRMIServidor
{

public static void main(String args[])


{

// Crea e instala el gestor de seguridad


System.setSecurityManager(new RMISecurityManager());

try
{
EcoRMISirviente miEco = new
EcoRMISirviente("//:4000/mi-EcoRMI");
System.out.println("Servidor de EcoRMI listo.");
} catch (Exception e) {
System.out.println("Excepcion: " + e.getMessage());
e.printStackTrace();
}
}
}
java.policy
En c:\rmi4 (servidor) necesitamos un archivo de
política de seguridad java.policy. Lo más simple
es habilitar todos los permisos. También lo
necesita el cliente; no obstante, basta con darle
la ruta en el momento de ejecutarlo
posteriormente.

grant {
permission java.security.AllPermission;
};
Compilar en el servidor

Desde la línea de comandos,


compilamos todas las clases en
c:\rmi4 (servidor):

„ >cd c:\rmi4
„ c:\rmi4>javac *.java
Generar stub
En la misma línea de comandos, generamos el
archivo de stub:
„ c:\rmi4>rmic EcoRMISirviente

Se genera un archivo llamado


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

También debemos copiar en la carpeta cliente


los archivos EcoRMI.java y EcoRMI.class
Clases en el cliente

Además de los archivos


EcoRMISirviente.class, EcoRMI.java y
EcoRMI.class que hemos copiado en
pasos previos, debemos guardar en
c:\rmi4\cliente el código fuente del cliente
al que denominaremos
EcoRMICliente.java
import java.io.*;
EcoRMICliente.java (1/2)
import java.rmi.*;
import java.rmi.registry.*;
import java.rmi.server.*;

public class EcoRMICliente


{

public static void main(String args[])

{
String mensajeEnviado;
String mensajeRecibido;
DataInputStream dataIn = new DataInputStream(System.in);
BufferedReader in =
new BufferedReader(new InputStreamReader(dataIn));

// Crea e instala el gestor de seguridad


System.setSecurityManager(new RMISecurityManager());

try {
EcoRMICliente.java (2/2)
EcoRMI miEco = (EcoRMI)Naming.lookup("rmi://"
+ args[0] + ":4000/" + "mi-EcoRMI");

// hace un bucle hasta el fin de la entrada


System.out.print("Eco> ");
while ((mensajeEnviado = in.readLine()) != null) {
mensajeRecibido = miEco.eco(mensajeEnviado);
System.out.println(mensajeRecibido);
System.out.print("Eco> ");
}
} catch(Exception e) {
System.err.println("Excepcion de Sistema: " + e);
}
System.exit(0);
}
}
Compilar el cliente

Desde una nueva línea de comandos,


compilamos la clase cliente en
c:\rmi4\cliente:
„ >cd c:\rmi4\cliente
„ c:\rmi4\cliente>javac EcoRMICliente.java
Lanzar el rmiregistry
Aprovechamos la línea de comandos en la que
compilamos las clases del servidor para lanzar
el registro de RMI en el puerto 4000 (en mi
caso, el puerto por defecto 1099 estaba
ocupado y no lo podía usar). Es importante
advertir que ese es el puerto que he utilizado en
el código de Servidor y del Cliente; si usaseis
otro deberíais cambiar también el código:

„ c:\rmi4>start rmiregistry 4000

(Debe abrirse una ventana de línea de


comandos vacía y permanecer abierta. Si se
cierra es que algo va mal)
Lanzar el servidor

Desde la misma línea de comandos en la


que estoy ejecuto el servidor:

„ c:\rmi4>java –Djava.security.policy=file:///c:/rmi4/java.policy EcoRMIServidor


Lanzar el cliente

Desde la misma línea de comandos en la


que compilé la clase del cliente, ejecuto el
proceso cliente:

„ c:\rmi4\cliente>java –Djava.security.policy=file:///c:/rmi4/java.policy
EcoRMICliente localhost
La ejecución
Una vez lanzados todos los procesos sólo hay
que escribir algo en el prompt de la ventana de
comandos del cliente y observar cómo
efectivamente se produce el eco de lo escrito
en las dos ventanas

Cliente
Servidor

También podría gustarte