简单的RPC编程实践——HelloWorld的实现
来源:互联网 发布:刀具半径补偿编程 编辑:程序博客网 时间:2024/06/15 13:27
近期课程的作业需要用到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完成,它会自动生成相关的代码。
练习的代码的参考:http://wenku.baidu.com/view/58e19446b307e87101f696c6.html这个程序的目的是客户端接收一个参数(设置为HelloWorld),发送给服务器,然后服务器显示自己的提示信息和客户端发来的信息。
调试不是很顺利,最开始时遇到了提示:Cannot register service: RPC: Unable to receive; errno = Connection refused。上网搜索得知,是因为服务器没有开启端口映射的功能,开启portmap就可以了。
sudo /etc/init.d/portmap restart
当然,我的Linux虚拟机没有安装portmap,需要安装。执行下面的命令:
当然,我的Linux虚拟机没有安装portmap,需要安装。执行下面的命令:
sudo apt-get install portmap
此时仍然报错:Cannot register service: RPC: Authentication error; why = Client credential too weak。这个看着百思不得其解,因为参数设置不是按照参考代码就是自动生成的(只有program编号是根据划分规则修改的),完全不知道错在哪里,查了很多资料也一头雾水。最后看到了一项搜索结果的预览(点击查看),提到了Fedora7出现这种问题改成超级用户即可。虽然现在虚拟机里用的是Ubuntu11.10,不过还是在运行编译好的文件前加了个sudo。输完密码果然显示需要的结果,这个小练习可以告一段落了。
- 简单的RPC编程实践——HelloWorld的实现
- B-树的学习笔记与C实现及 简单的RPC编程实践——HelloWorld的实现
- 简单的RPC实现
- 简单实现的RPC
- [UNIX网络编程] sun rpc实现的简单echo服务器
- 简单的RPC java实现
- 简单的RPC java实现
- 简单的RPC java实现
- 简单的RPC java实现
- 自己实现简单的RPC
- RPC的nodejs简单实现
- 《Spring实践——不一样的'HelloWorld'》
- dwr实现简单的helloWorld
- XML-RPC的HelloWorld实例
- xml-rpc的实践
- 一个简单RPC框架是如何炼成的(III)——实现带参数的RPC调用
- 一个简单RPC框架是如何炼成的(IV)——实现RPC消息的编解码
- 编写自己rpc框架——java rpc的实现
- 关于:软链接 和 硬链接
- Android:Failed to allocate memory: 8;This application has requested the Runtime to terminate it ...
- 类名.this与类名.class
- Java Tip 30: Polymorphism and Java
- 虚函数
- 简单的RPC编程实践——HelloWorld的实现
- Win7下的使用QTP进行猴子测试的性能日志实现方法
- Spring事务配置
- QTP快速入门和简易猴子测试的实现
- hdu 4308 Saving Princess claire_(bfs,4级)
- epoll学习和回显服务器实现(C语言版)
- Linux编译内核实验小结
- 网络编程之应用
- 利用模块添加系统调用(不重新编译内核)