博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简单的RPC编程实践——HelloWorld的实现
阅读量:5745 次
发布时间:2019-06-18

本文共 1423 字,大约阅读时间需要 4 分钟。

  近期课程的作业需要用到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完成,它会自动生成相关的代码。
  练习的代码的参考: 这个程序的目的是客户端接收一个参数(设置为HelloWorld),发送给服务器,然后服务器显示自己的提示信息和客户端发来的信息。
 
  调试不是很顺利,最开始时遇到了提示: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。输完密码果然显示需要的结果,这个小练习可以告一段落了。
 

转载地址:http://pbxzx.baihongyu.com/

你可能感兴趣的文章
Kubernetes API 分析 ( Kube-apiserver )
查看>>
4-学会刷Wi-Fi模块固件(刷AT指令固件)
查看>>
ASP.NET Core 2 学习笔记(五)静态文件
查看>>
Button 使用Command 按钮置灰未更新
查看>>
PostgreSQL控制台以竖行显示
查看>>
CSS-Flex 布局教程:实例篇
查看>>
Java和移动端交互
查看>>
Java SSM 客户管理 商户 管理系统 库存管理 销售报表 项目源码
查看>>
排序优化——如何实现一个通用的、高性能的排序函数
查看>>
IDEA中css文件包红色下划线
查看>>
js中bind、call、apply函数的用法
查看>>
OC高效率52之多用GCD,少用performSelector系列方法
查看>>
sqoop导入关系型数据库-解密Sqoop
查看>>
语音分享应用ios源码项目
查看>>
性能测试结果分析
查看>>
Linux-dns基础知识和BIND的简单配置-1
查看>>
kafka Corrupt index found
查看>>
PoE
查看>>
《JAVA与模式》之适配器模式
查看>>
采用spring+structs+hibanate框架开发javaWeb项目
查看>>