RPCS

Páginas: 5 (1098 palabras) Publicado: 5 de febrero de 2014
Área de Ingeniería Telemática
Departamento de Ingeniería de Sistemas y Automática
Escuela Superior de Ingenieros
Universidad de Sevilla

LLAMADAS A PROCEDIMIENTO REMOTO
1. OBJETIVO
El objetivo es mostrar el funcionamiento de las llamadas a procedimiento remoto
mediante la prueba de un ejemplo simple.

2. DESCRIPCIÓN
Las llamadas a procedimiento remoto permiten crear servidores de unaforma fácil y cómoda.
Para la especificación de un servicio en las RPCs se debe definir un conjunto de procedimientos
dentro de un programa. Cada programa puede tener varias versiones. Esto permite cambiar la
interfaz del servicio permitiendo que clientes que utilizan versiones anteriores sigan
funcionando. Los programas, las versiones y procedimientos se identifican mediante números
enteros.Un procedimiento queda totalmente identificado mediante la terna:

Los números de versión se utilizan en las RPC para permitir que existan servidores similares
(mismo programa) que exportan interfaces distintas (distintas versiones).
El primer paso que hay que dar para la creación de un servidor es especificar su interfaz, donde
se indican los procedimientos que el servidor exporta. Estaespecificación se escribe en un
fichero cuya extensión es .x.
Por ejemplo, para un servidor con dos procedimientos remotos, sumar y restar, la interfaz es la
siguiente:

program CALCULAR {
version UNO {
int sumar (int a, int b) = 1;
int restar(int a, int b) = 2;
}=1;
}=999999999;

calcular.x
En calcular.x se ha definido la versión UNO (con identificador 1) del programa CALCULAR (conidentificador 999999999) que contiene el procedimiento sumar (con identificador 1) y el
procedimiento restar (con identificador 2). No se puede utilizar como número de
procedimiento el valor cero.

Una vez definida la interfaz, se utiliza el programa rpcgen para generar automáticamente el
soporte (stub) del cliente y del servidor. Debido a que se ha utilizado más de un argumento en losprocedimientos hay que indicárselo explícitamente a este programa con la opción –N (-C para
generar código ANSI C):
rpcgen –N –C calcular.x

con esta orden se generarán automáticamente los siguientes ficheros:
calcular.h: fichero de cabecera a incluir en el cliente y en el
calcular_svc.c: soporte del servidor.
calcular_clnt.c: soporte del cliente.
calcular_xdr.c: funciones para la transformaciónde tipos.

servidor.

A continuación el programador debe codificar el programa cliente y el programa servidor.
Los servidores deben implementar cada una de las funciones especificadas en el archivo de
definición de interfaces. Estas funciones, que deben ser implementadas por el programador,
tienen la siguiente forma:
tipo_resultado *procedimiento_V_svc(tipo_argumento arg, struct svc_req*sr);

Al nombre del procedimiento se le añade el número de versión seguido de _svc (porque
pertenece al servidor). El segundo argumento permite acceder, aunque no se utiliza
normalmente, a diferentes características como el número de versión o el número de
procedimiento.
En el ejemplo, el programa servidor debe incluir la implementación de las funciones sumar y
de la siguiente forma:restar

#include "calcular.h"
int * sumar_1_svc(int a, int b, struct svc_req *rqstp)
{
static int r;
r = a + b;
return(&r);
}
int * restar_1_svc(int a, int b, struct svc_req *rqstp)
{
static int r;
r = a - b;
return(&r);
}

calcular_servidor.c
Las variables que almacenan el resultado deben ser de tipo static (static int r), debido a que
las funciones anteriores devuelven un puntero aentero.

El cliente, para poder ejecutar un procedimiento remoto debe en primer lugar establecer una
conexión con el servidor, mediante el siguiente servicio:
CLIENT *clnt_create(char *host,u_long prognum,u_long versnum,char *protocol);

El primer argumento especifica el nombre de la máquina donde ejecuta el servidor. Los dos
siguientes argumentos especifican el número de programa y...
Leer documento completo

Regístrate para leer el documento completo.

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS