系统:LinuxMint mate 17.2 32bit
gcc:gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04)
rpcgen:rpcgen (Ubuntu EGLIBC 2.19-0ubuntu6.6) 2.19
rpc依赖库 portmap或者 rpcbind
可执行 apt-get install portmap 进行安装,准备完毕后,详见以下步骤
创建规格文件 math.x,内容如下
/* filename: math.x */ const ADD = 0; const SUB = 1; const MUL = 2; const DIV = 3; struct MATH { int op; /* 0-ADD, 1-SUB, 2-MUL, 3-DIV */ float arg1; float arg2; float result; }; program MATH_PROG { version MATH_VER { struct MATH MATH_PROC(struct MATH) = 1; } = 2; } = 0x20000001;
终端中运行
rpcgen –C –a math.x
生成7个文件,math.h、math_xdr.c、math_svc.c、math_clnt.c、Makefile.math、math_client.c、math_server.c
分别修改 math_server.c 和math_client.c如下
math_client.c
/* * This is sample code generated by rpcgen. * These are only templates and you can use them * as a guideline for developing your own functions. */ #include "math.h" void math_prog_2(char *host) { CLIENT *clnt; struct MATH *result_1; struct MATH math_proc_2_arg; /* 2006/07/04 Dongyy Add -> */ char c; printf( "choose the operation:\n\t0---ADD\n\t1---SUB\n\t2---MUL\n\t3---DIV\n"); c = getchar(); switch (c) { case '0': math_proc_2_arg.op = ADD; break; case '1': math_proc_2_arg.op = SUB; break; case '2': math_proc_2_arg.op = MUL; break; case '3': math_proc_2_arg.op = DIV; break; default: printf("error:operate\n"); exit(1); } printf("input the first number:"); scanf("%f", &math_proc_2_arg.arg1); printf("input the second number:"); scanf("%f", &math_proc_2_arg.arg2); /* <- 2006/07/04 Dongyy Add */ #ifndef DEBUG clnt = clnt_create(host, MATH_PROG, MATH_VER, "udp"); if (clnt == NULL) { clnt_pcreateerror(host); exit(1); } #endif /* DEBUG */ result_1 = math_proc_2(&math_proc_2_arg, clnt); if (result_1 == (struct MATH *) NULL) { clnt_perror(clnt, "call failed"); } #ifndef DEBUG clnt_destroy(clnt); #endif /* DEBUG */ /* 2006/07/04 Dongyy Add -> */ printf("The Result is %.3f \n", result_1->result); /* <- 2006/07/04 Dongyy Add */ } int main(int argc, char *argv[]) { char *host; if (argc < 2) { printf("usage: %s server_host\n", argv[0]); exit(1); } host = argv[1]; math_prog_2(host); exit(0); }
math_server.c
/* * This is sample code generated by rpcgen. * These are only templates and you can use them * as a guideline for developing your own functions. */ #include "math.h" struct MATH * math_proc_2_svc(struct MATH *argp, struct svc_req *rqstp) { static struct MATH result; /* * insert server code here */ /* 2006/07/04 Dongyy Add -> */ switch (argp->op) { case ADD: result.result = argp->arg1 + argp->arg2; break; case SUB: result.result = argp->arg1 - argp->arg2; break; case MUL: result.result = argp->arg1 * argp->arg2; break; case DIV: result.result = argp->arg1 / argp->arg2; break; default: break; } /* <- 2006/07/04 Dongyy Add */ return &result; }
编译,测试
gcc -Wall -o math_server math_server.c math_svc.c math_xdr.c
gcc -Wall -o math_client math_client.c math_xdr.c math_clnt.c
执行./math_server
另起终端执行: ./math_client 127.0.0.1
如下图
各位看官,自行脑补代码实现去。。。。
相关推荐
总之,`rpc远程调用库C语言实现`是关于构建跨进程通信的解决方案,通过JSON这种轻量级的数据交换格式,使得C语言程序可以高效、灵活地进行远程调用。`jsonrpc-c-master`提供了实现这一功能的基础框架和工具,让...
EmbedXrpc是一个基于C语言的单片机RPC远程调用框架,旨在简化单片机环境下的远程过程调用开发。该项目采用C#作为IDL(接口定义语言)的实现语言,并结合C#脚本(csscript)进行序列化与反序列化处理。框架通过自动化...
**cRPC:纯C语言实现的远程方法调用** cRPC是一种基于C语言实现的远程过程调用(Remote Procedure Call)框架。远程方法调用允许程序在不同的计算节点上进行通信,就像是调用本地函数一样方便。cRPC的核心概念是...
### RPC远程过程调用详解 #### 一、引言 远程过程调用(Remote Procedure Call, RPC)是一种网络通信模式,它允许程序通过网络调用位于另一台计算机上的子程序,如同调用本地程序一样。RPC的设计目标是提供一个透明...
【网络程序设计教材第十一章】探讨了RPC(Remote Procedure Call)远程过程调用这一关键概念,它是分布式计算中进程间通信的一种重要方式。RPC使得一个进程能够像调用本地函数一样调用运行在另一台计算机上的过程,...
JSON-RPC(JavaScript Object Notation Remote Procedure Call)是一种轻量级的远程过程调用协议,它使用JSON(JavaScript Object Notation)作为数据交换格式。基于JSON-RPC 1.0的C语言实现,如"jsonrpc-c-master...
4. 客户端接收并解码结果,完成远程调用。 在Windows中,RPC是通过系统提供的RPC运行时库来实现的,它包括了编译、安全、传输和内存管理等功能。开发人员使用Microsoft的RPC编程接口(如`rpc.h`头文件和`rpcrt4.lib...
JSON-RPC(JavaScript Object Notation Remote Procedure Call)是一种轻量级的远程过程调用协议,它使用JSON(JavaScript Object Notation)作为数据交换格式。在本文中,我们将深入探讨JSON-RPC协议的C语言实现,...
RPC(Remote Procedure Call)协议是一种进程间通信(IPC)机制,允许一个程序调用另一个位于不同地址空间(可能在同一台机器上,也可能在远程网络上)的程序中的函数或方法,就像它是一个本地调用一样。这个zip文件...
RPC,即Remote Procedure Call,远程过程调用,是一种在分布式计算环境中进行进程间通信的技术。在Linux系统中,RPC被广泛应用于构建分布式系统,允许不同的计算机节点之间能够像调用本地函数一样调用远端服务器上的...
本资料主要探讨如何利用Binder机制来进行远程过程调用(RPC,Remote Procedure Call),并结合C语言接口编程进行实践。 一、Binder机制概述 Binder是Android系统中的一个核心组件,它允许不同进程间的对象进行交互...
针对这些问题,本文提出了一种基于C语言开发的面向嵌入式系统的XML-RPC远程调用应用实现框架。 #### 关键词解读 - **嵌入式系统**:指那些专门设计用于特定任务或功能的计算机系统。这些系统通常具有资源受限的...
RPC的核心思想是隐藏网络通信的复杂性,提供一种透明的远程调用机制。在C语言环境中,Sun RPC提供了客户端和服务器端的API,使得开发者可以方便地构建分布式系统。以下是RPC在C语言中的关键知识点: 1. **XDR...
RPC,即Remote Procedure Call,远程过程调用,是计算机网络编程中的一个重要概念。它允许一个程序在一台机器上执行操作,而数据实际上被处理在另一台机器上,从而简化了分布式系统之间的通信。RPC机制使得程序员...
RPC,即Remote Procedure Call(远程过程调用),是一种在分布式计算环境中实现进程间通信的技术。在C语言中实现RPC,可以让我们在不同的计算机之间透明地调用函数或方法,仿佛它们是在同一台机器上执行一样。RPC...
预编译器的设计基于多线程和RPC(远程过程调用)技术,能够充分利用系统中的多处理机资源,提高系统效率。 论文的实验结果表明,使用并行C语言编写的程序能够有效地在分布式环境下实现并行计算,并充分利用系统中的...
RPC(Remote Procedure Call)是一种计算机通信协议,它允许程序在一台计算机上执行远程操作,就像调用本地函数一样。在Linux环境下,实现RPC通常涉及到XDR(eXternal Data Representation)编码规则,以及RPC协议栈...
在IT行业中,远程过程调用(Remote Procedure Call, RPC)和数据访问中间件是关键的技术,它们用于构建分布式系统和实现跨网络的数据交互。实习任务旨在让学生深入理解这些概念并熟练掌握其应用。 首先,RPC是一种...