近期课程的作业需要用到RPC编程,除了课堂上学到的知识,还得亲自动手。打算先写个简单的HelloWorld练习一下,顺便复习一下学到的知识。
RPC意为远程过程调用协议(Remote Procedure Call Protocol)。编制好单机应用程序,然后划分为两个或多个程序片,加入通信协议使得每片可以在单独的计算机上运行。从一个程序片调用另一个程序片的过程称为远程过程调用,即RPC。它是一个C/S模型,调用程序称为rpc client,被调用程序片称为rpc server。
对于RPC的编程过程可以简化如下:
1.构建解决问题的常规应用程序;
2.选择一组过程形成远程程序,以便将远程程序转移到远程机器中,通过这种方法将程序分解;
3.为远程程序编写RPC界面(xxx.idl),包括远程的名字及其编号,还有对其参数的申明,选择远程程序号和版本号;
4.运行rpcgen检查该界面,如果合法,便生成四个源代码文件:xxx.h(类型说明文件)、xxx_XDR.c(XDR转换例程)、xxx_clnt.c(客户端的stub)以及xxx_svc.c(服务守护过程,服务端的stub) ,这些文件将在客户和服务器程序中使用;
5.为客户端和服务器端编写stub接口例程;
6.编译并链接客户程序。它由四个主要文件组成:去掉了远程过程的程序、客户端的stub(rpc生成)、客户端的stub接口以及XDR过程( rpc生成)。
7.编译并链接服务器程序。它由四个主要文件组成:远程过程组成的程序、服务器的stub(rpc生成)、服务器端的stub接口以及XDR过程( rpc生成)。
8.在远程机器上启动服务器,接着在本机上启动客户。
简单来讲,需要做的主要工作就是编写应用程序并分片,编写接口(规格说明文件),编写stub接口例程,编写主函数。通信协议的实现和XDR数据格式的统一交给rpcgen完成,它会自动生成相关的代码。
调试不是很顺利,最开始时遇到了提示:Cannot register service: RPC: Unable to receive; errno = Connection refused。上网搜索得知,是因为服务器没有开启端口映射的功能,开启portmap就可以了。
sudo /etc/init.d/portmap restart
当然,我的Linux虚拟机没有安装portmap,需要安装。执行下面的命令:
sudo apt-get install portmap
此时仍然报错:Cannot register service: RPC: Authentication error; why = Client credential too weak。这个看着百思不得其解,因为参数设置不是按照参考代码就是自动生成的(只有program编号是根据划分规则修改的),完全不知道错在哪里,查了很多资料也一头雾水。最后看到了一项搜索结果的预览(
点击查看),提到了Fedora7出现这种问题改成超级用户即可。虽然现在虚拟机里用的是Ubuntu11.10,不过还是在运行编译好的文件前加了个sudo。输完密码果然显示需要的结果,这个小练习可以告一段落了。
分享到:
相关推荐
在Delta3D中,"Delta3D——helloworld"可能是指一个教程或示例项目,帮助新手了解如何在Delta3D环境下创建并运行基础的3D应用。 Delta3D引擎提供了丰富的功能,包括图形渲染、物理模拟、音频处理、脚本系统和网络...
通过学习和实践"我的第一个Android程序——HelloWorld",开发者将对Android应用程序的基本构建块有初步了解,为进一步深入学习Android开发打下坚实基础。同时,这也是软件工程实践的第一步,有助于培养良好的编程...
在本篇“Spring学习笔记——HelloWorld”中,我们将探讨Spring框架的基础知识,以及如何创建一个简单的Spring应用程序。Spring是一个广泛使用的Java企业级应用开发框架,它提供了丰富的功能,包括依赖注入、AOP...
hello world视频教程,希望能够学习者提供帮助,实现对Android基础知识的掌握与理解,为后续学习做好铺垫,实现Android知识的灵活运用
这个"HelloWorld"示例是为了演示如何在Activiti中模拟一个简单的流程执行。在这个流程中,我们看到一个典型的审批流程,涉及到三个角色:张三、李四和王五。 首先,我们要理解流程的启动。在Activiti中,启动流程...
手把手教你如何快速搭建spring mvc环境.zip
文章还提到了用多种编程语言实现"Hello World"的例子,这不仅体现了编程语言的多样性,也是对比和理解不同语言特性的有趣实践。最后,作者通过引用费玛最后定理和《礼记·大学》的部分内容,暗示了理解和证明复杂...
"Mac下实现Java HelloWorld"这个话题主要涵盖了如何在Mac系统中配置Java环境并执行第一个Java程序。以下是对这个过程的详细阐述: 首先,确保你的Mac已经安装了Java开发工具(JDK)。可以通过在终端输入`javac -...
【Hello World 编程】是编程世界的入门程序,无论你学习的是哪种编程语言,它都是初学者的第一课。这个简单的程序通常在控制台上打印出 "Hello, World!" 这个短语,以此来验证编译环境和基本语法的正确性。它的起源...
通过实现HelloWorld程序,可以验证开发环境是否正确设置,并了解如何将简单的文本输出到屏幕上。 ### 汇编语言中的HelloWorld程序分析 #### 数据段(Data Segment) 在给定的代码中,数据段定义了字符串`Hello...
标题中的“hello world hello world”和描述中的“hello world”似乎是在引用计算机编程中的经典入门程序,通常用于演示一个语言的基本输出功能。在大多数编程语言中,“Hello, World!”是初学者编写的第一个程序,...
用C编出来的第一个windows程序,创建一个带窗口的程序,显示Hello,Windows!
3. **编程语言中的实现**:列举了多种编程语言下“Hello World”程序的写法,展示了不同语言的特点和语法差异。 #### “Hello World”程序的理论基础 文章详细介绍了图灵机的概念及其在“Hello World”程序中的...
我们需要一个简单的Java类,该类包含一个公共方法,例如`sayHello()`,该方法返回字符串"Hello, World!"。这个类将作为Web服务的接口。 ```java public class HelloWorld { public String sayHello() { return ...
尽管“Hello World”是编程初学者的第一个练习程序,通常用于演示基本语法,但它的实现方式能够反映出不同编程语言和开发环境的特点。在不同的技术实现中,它可以是学习工具,也可以是测试开发环境是否正确设置的一...
在编程世界中,"Hello, World!"程序是一个经典的起点,用于教授新手如何在特定的编程语言中编写并运行他们的第一个程序。这个简单的程序通常只包含一行代码,用于在控制台上打印出 "Hello, World!" 这个字符串。在这...
"Hello, World"是计算机编程中的一个经典例子,用于展示一个语言的基本用法。在OpenWrt中,编写和运行"Hello, World"可以帮助我们熟悉交叉编译、OpenWrt的软件包构建系统以及如何在目标设备上运行自定义程序。 三、...
[Manning Publications] Hello World! 少儿电脑编程 初学者指南 第1版 (英文版) [Manning Publications] Hello World! Computer Programming for Kids and Other Beginners 1st Edition (E-Book) ☆ 图书概要:☆ ...
标题中的"Hello_World.zip_hello world _world"和描述中的"hello world prog for begginer"都指向了一个经典的编程入门示例——“Hello, World!”程序。这个简单的程序是许多编程语言教学的第一课,用于向初学者介绍...
本教程将带你了解如何在Visual Studio 2010环境下编写一个简单的MPI程序——"Hello World"。 首先,我们需要理解MPI的基本概念。MPI是异构系统间进程通信的接口,它定义了一组函数,允许程序员编写可移植的并行程序...