You are on page 1of 4

Jorge Andres Moreno Jaimes (jamper91) RPC en Linux con Lenguaje C

Buenos dias compaeros, el dia de hoy les traigo un manual sobre cmo realizar RPC (Llamado de procedimiento remoto ) en linux con lenguaje C. Para realizar esto tenemos primero que saber para qu nos sirve esto, y qu es RPC. El codigo lo pueden conseguir en mi pagina.

RPC(Remote Procedure Call) es un protocolo que nos permite ejecutar el cdigo de algun otro programa desde otra pc, es decir yo puedo desde mi pc llamar a una aplicacin en otra pc (cualquiera en el mundo, sabiendo su direccin IP), esto con el fin de aplicar los sistemas distribuidos en nuestras aplicaciones, en otras palabras que una sola mquina no realiza todo el trabajo para ejecutar un software, algunas personas vern esto un poco intil (pues algunos an no hemos desarrollado algoritmos muy complejos) pero puede ser de gran importancia en las aplicaciones mviles, pues como saben algunos telfonos actuales an no tienen una gran capacidad de procesamiento, entonces podremos disear nuestra aplicacin para que se realice un procedimiento en algun servidor externo y nuestra aplicacin haga solo cosas sencillas como interfaz con usuario u otros.

Ejemplos Gratis de C, java y muchos mas ...http://jamper91.hostei.com1

Jorge Andres Moreno Jaimes (jamper91) Esta guia esta basada en otra guia muy buena de RPC (Remote Procedure Call) , solo que aqu complementaremos un poco el cdigo del cliente y del servidor para poder ver su funcionamiento. Requerimientos: Primero que todo debemos tener alguna distribucin de Linux (Ubuntu, Debian, etc) para poder ejecutar este cdigo Tambin debemos tener instalados los siguiente paquetes: portmap rpcbind Si no los tienes instalados o no sabes como instalarlos, debes abrir una terminal y escribir el siguiente cdigo: sudo apt-get install portmap sudo apt-get install rpcbind Tras haber realizado lo siguiente ya estamos listos para empezar. Como he dicho anteriormente, nos estamos basando en esta guia, asi que si tiene alguna duda pueden ir a esa pagina, pues tratare de ser un poco breve en el aspecto terico.

Pasos: 1. Primero creamos un directorio donde colocaremos todos los archivos, en mi caso cree un directorio llamado RPC en Documentos, quedando mi ruta as: /home/jamper91a/Documentos/RPC/ 2. Debemos crear un archivo que contendr el cdigo que deseamos llamar, en este caso ser un programa que se encarga de sumar dos nmeros, para eso creamos un archivo llamado suma.x que contendr el siguiente cdigo: struct sumandos { int sumando1; int sumando2; }; program PROGRAMA_SUMA { version VERSION_SUMA { int suma (sumandos) = 1; } = 1; } = 0x20000001; Para poder implementar RPC, las funciones solamente pueden recibir un parmetro, del tipo nativo (int,long,etc) o una estructura. Pero debido a que muchas funciones necesitan ms de un parmetro, entonces necesitamos crear una estructura que contenga los parmetros que deseemos. En el ejemplo se cre una estructura llamada sumandos, que contiene los nmeros a sumar. Para poder ver la explicacin completa del cdigo puedes visitar chuidiang. Ejemplos Gratis de C, java y muchos mas ...http://jamper91.hostei.com2

Jorge Andres Moreno Jaimes (jamper91) 3. Abrimos un terminal y nos dirigimos a la carpeta donde se encuentre el archivo suma.x (en mi caso /home/jamper91a/Documentos/RPC/ ) y escribimos el siguiente comando: rpcgen -a suma.x Este nos generara 7 ficheros (los cuales puedes ver su explicacin aqu ). De los cuales nos llama mas la atencion los archivos suma_client.c suma_server.c 4. Primero que todos vamos a editar el archivo suma_server.c para que el servidor realmente nos permita sumar los dos nmeros, para eso en la consola digitamos: sudo gedit suma_server.c y editamos el cdigo, para que nos quede as: int * suma_1_svc(sumandos *argp, struct svc_req *rqstp) { static int result; result = argp->sumando1 + argp->sumando2; return &result; } 5. Ahora editaremos el archivo suma_client.c para que sea interactivo con el usuario, es decir, esta aplicacin se encargara de conversar con el usuario, pidindole los datos necesario para que la aplicacin pueda ejecutarse(en nuestro caso, pediremos los 2 nmeros a sumar, y mostraremos el resultado). Para todo eso digitamos el siguiente comando en consola: sudo gedit suma_client.c

programa_suma_1(char *host) { CLIENT *clnt; int *result_1; sumandos suma_1_arg; /** Editor los valores que tendra la estructura */ printf("Por favor digite los elementos a sumar: \n a: "); scanf("%d",& suma_1_arg.sumando1); printf("b: "); scanf("%d",& suma_1_arg.sumando2); #ifndef DEBUG clnt = clnt_create (host, PROGRAMA_SUMA, VERSION_SUMA, "udp"); if (clnt == NULL) { clnt_pcreateerror (host); exit (1); } /* DEBUG */ result_1 = suma_1(&suma_1_arg, clnt); if (result_1 == (int *) NULL) {

#endif

Ejemplos Gratis de C, java y muchos mas ...http://jamper91.hostei.com3

Jorge Andres Moreno Jaimes (jamper91)


clnt_perror (clnt, "call failed"); } DEBUG clnt_destroy (clnt); /* DEBUG */ printf("Suma: %d\n",*result_1);

#ifndef #endif }

En el cdigo anterior vern unas partes rojas, esas son el aadido para la guia de chuidiang, en esas porciones de cdigo, me encargo de preguntar al usuario los nmeros a sumar, y de mostrar el resultado. Ante cualquier inquietud, pueden visitar mi pgina, y descargar el cdigo fuente del archivo suma_client.c y suma_server.c Ejecucin: 1. Para ejecutar el cdigo, debemos primero hacer una compilacin para crear los ejecutables, para eso digitamos: make -f Makefile.suma 2. Luego iniciamos el servidor RPC, para eso digitamos por consola sudo ./suma_server 3. Y luego para poder llamar al servidor debemos ejecutar nuestro cliente de la siguiente manera sudo ./suma_client host, donde host es la direccion del server, en este caso localhost sudo./suma_client localhost

Ejemplos Gratis de C, java y muchos mas ...http://jamper91.hostei.com4

You might also like