Jorge Andres Moreno Jaimes (jamper91) RPC en Linux con Lenguaje C
Buenos dias compañeros, el dia de hoy les traigo un manual sobre cómo 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 pagina..
RPC(Remote Procedure Call) es un protocolo que nos permite ejecutar el código de algun otro programa desde otra pc, es decir yo puedo desde mi pc llamar a una aplicación en otra pc (cualquiera en el mundo, sabiendo su dirección IP), esto con el fin de aplicar los sistemas distribuidos en nuestras aplicaciones, en otras palabras que una sola máquina no realiza todo el trabajo para ejecutar un software, algunas personas verán esto un poco inútil (pues algunos aún no hemos desarrollado algoritmos muy complejos) pero puede ser de gran importancia en las aplicaciones móviles, pues como saben algunos teléfonos actuales aún no tienen una gran capacidad de procesamiento, entonces podremos diseñar nuestra aplicación para que se realice un procedimiento en algun servidor externo y nuestra aplicación haga solo cosas sencillas como interfaz con usuario u otros.
Ejemplos Gratis de C, java y muchos mas ... http://jamper91.hostei.com 1
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 código del cliente y del servidor para poder ver su funcionamiento. Requerimientos : Primero que todo debemos tener alguna distribución de Linux (Ubuntu, Debian, etc) para poder ejecutar este código También 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 código: ● sudo sudo aptapt-ge gett inst instal alll port portma map p ● sudo sudo aptapt-ge gett inst instal alll rpcb rpcbin ind d Tras haber realizado lo siguiente ya estamos listos para empezar. Como he dicho anteriormente, nos estamos basando en esta guia guia,, asi que si tiene alguna duda pueden ir a esa pagina, pues tratare de ser un poco breve en el aspecto teórico.
Pasos: 1. Primero creamos creamos un directorio donde donde colocaremos colocaremos todos los los archivos, en mi caso caso cree un directorio llamado RPC en Documentos, quedando mi ruta así: /home/jamper91a /home/jamper91a/Documento /Documentos/RPC/ s/RPC/ 2. Debemos crear crear un archivo archivo que contendrá contendrá el el código que que deseamos deseamos llamar, en en este caso caso será un programa que se encarga de sumar dos números, para eso creamos un archivo llamado suma.x que contendrá el siguiente código: 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 parámetro, del tipo nativo (int,long,etc) o una estructura. Pero debido a que muchas funciones necesitan más de un parámetro, entonces necesitamos crear una estructura que contenga los parámetros que deseemos. En el ejemplo se creó una estructura llamada sumandos, que contiene los números a sumar. Para poder ver la explicación completa del código puedes visitar chuidiang chuidiang.. Ejemplos Gratis de C, java y muchos mas ... http://jamper91.hostei.com 2
Jorge Andres Moreno Jaimes (jamper91) 3. Abrimos un terminal y nos dirigimos dirigimos a la carpeta donde se encuentre encuentre el archivo suma.x 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 explicación aquí ). De los cuales nos llama mas la atencion los archivos ● suma_client.c ● suma_server.c 4. Primero que todos todos vamos a editar editar el archivo suma_server.c suma_server.c para que que el servidor realmente nos permita sumar los dos números, para eso en la consola digitamos: sudo gedit suma_server.c y editamos el código, 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 editaremos el archivo archivo suma_client.c suma_client.c para para que sea sea interactivo interactivo con el usuario, es es decir, esta aplicación se encargara de “conversar” con el usuario, pidiéndole los datos necesario para que la aplicación pueda ejecutarse(en nuestro caso, pediremos los 2 números 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
#endif
DEBUG clnt = clnt_create (host, PROGRAMA_SUMA, VERSION_SUMA, VERSION_SUMA, "udp"); if (clnt == NULL) { clnt_pcreateerror (host); exit (1); } /* DE DEBUG */ */ result_1 = suma_1(&suma_1_arg, clnt); if (result_1 == (int *) NULL) {
Ejemplos Gratis de C, java y muchos mas ... http://jamper91.hostei.com 3
Jorge Andres Moreno Jaimes (jamper91)
#ifndef #endif
clnt_perror (clnt, "call failed"); } DEBUG clnt_destroy (clnt); /* DE DEBUG */ */ printf("Suma: %d\n",*result_ %d\n",*result_1); 1);
}
En el código anterior verán unas partes rojas, esas son el añadido para la guia de chuidiang, en esas porciones de código, me encargo de preguntar al usuario los números a sumar, y de mostrar el resultado. Ante cualquier inquietud, inquietud, pueden visitar mi página página,, y descargar el código fuente del archivo suma_client.c y suma_server.c Ejecución: Ejecución : 1. Para ejecutar ejecutar el código, debemos debemos primero hacer hacer una compilación para para crear los ejecutables, para eso digitamos: make -f Makefile.suma 2. Luego Luego iniciamos iniciamos el servidor servidor RPC, RPC, para eso eso digitamos digitamos por por consola consola sudo ./suma_server 3. Y luego para para poder poder llamar al servidor servidor debemos debemos ejecutar ejecutar nuestro cliente de la siguiente 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.com 4