Que es una llamada de procedimiento remoto Es un protocolo que permite a un programa de ordenador ejecutar cdigo en otra mquina remota
sin tener que preocuparse por las comunicaciones entre ambos. Modelo de RPC sobre cliente-servidor
Como se manda llamar al cliente y servidor
El cdigo del cliente:
/* * rdate.c - programa cliente >> servicio de tiempo /*
#include <stdio.h> #include <rpc/rpc.h>
#include date.h
main(int argc, char *argv[]) { CLIENT *cl; // RPC handle char *server; long *lresult; char **sresult;
if (argc = 2) { fprintf(stderr, Usage: %s hostname\n, argv[0]); exit(1); } server = argv[1];
// Creacin del handle del cliente if (( cl=cln_create(server, DATE_PROG, DATE_VERS, udp)) == NULL ) { // No se pudo establecer la conexin clnt_pcreateerror(server); exit(2); }
// Primero llamamos al procedimiento remoto bin_ date. if (( lresult = bin_date_1(NULL, cl)) == NULL ) { clnt_perror(cl, server); exit(3); }
printf(time on host %s = %ld\n, server, *lresult);
// Ahora llamamos al procedimiento remoto str_ date. if (( sresult = str_date_1(lresult, cl)) == NULL ) { clnt_perror(cl, server); exit(4); }
printf(time on host %s = %s, server, *sresult);
clnt_destroy(cl); // Destruccin del handle del cliente
exit(0); }
El cdigo del servidor:
/* * dateproc.c - procedimientos remotos /*
#include <rpc/rpc.h> #include <time.h> #include date.h
// Devuelve la hora y fecha en formato binario
long *bin_date_1() { static long timeval; // debe ser una variable esttica
timeval= time((long *) 0); return(&timeval); }
// Devuelve la hora y fecha como cadena de caracteres char **str_date_1(long *bintime) { static char *ptr; // debe ser una variable esttica
ptr = ctime(bintime); return(&ptr); } Modelo de operacin Cliente-Servidor
Tipos pasos de parmetros -por valor
de
-en el stack se copia el valor del parmetro -valor de salida es igual a valor de entrada -por referencia -en el stack se almacena la direccin de la variable -es posible modificar el valor del parmetro -Llamado con copia/restauracin -se copia el valor de la variable en el stack, (como en paso por valor) -al final de la ejecucin local se copia el valor que tiene la variable dentro del procedimiento, en el stack -el procedimiento que mand llamar al procedimiento remoto copia el valor final en condiciones normales tiene el mismo efecto que el paso por referencia Fallas que puede haber en un RPC 1. El cliente es incapaz de localizar al servidor. 2. El mensaje de peticin del cliente al servidor se perdi. 3. El mensaje de respuesta del servidor al cliente se perdi. 4. El servidor fall (crashes) despus de recibir una peticin. 5. El cliente fall (crashes) despus de enviar una peticin.