0% encontró este documento útil (0 votos)
34 vistas5 páginas

RPC

Este documento explica el protocolo RPC (Remote Procedure Call) que permite ejecutar código en una máquina remota. Describe el modelo cliente-servidor y cómo se implementa un cliente y servidor RPC con ejemplos de código.

Cargado por

AlexMontero
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOC, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
34 vistas5 páginas

RPC

Este documento explica el protocolo RPC (Remote Procedure Call) que permite ejecutar código en una máquina remota. Describe el modelo cliente-servidor y cómo se implementa un cliente y servidor RPC con ejemplos de código.

Cargado por

AlexMontero
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOC, PDF, TXT o lee en línea desde Scribd

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.

También podría gustarte