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

#endif

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) {

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

Jorge Andres Moreno Jaimes (jamper91)

#ifndef
#endif

clnt_perror (clnt, "call failed");


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

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