linux 中rpc 服务器,实现Linux环境下编程RPC通信之个人经验总结(转)

#include #include "trans.h"

char * readfile(char *);

static char * retcode;

char ** readfile_1(char ** w, CLIENT *clnt)

{

retcode = readfile(*(char**)w);

return &retcode;

}

6.        编译链接客户端和服务器端程序

不管是客户端还是服务器端,都要链接三个文件,

客户端:程序文件+*** _clnt.c+客户端接口文件。

服务器端:程序文件+*** _svc.c+服务器端接口文件

同时每一段的三个文件都是互相关联的,编译出现错误时,可以根据提示查看三个文件进行debug

命令如下:

gcc -Wall -o trans_client client.c trans_clnt.c trans_cif.c

gcc -Wall -o trans_server server.c trans_svc.c trans_sif.c

7.        启动服务器端和客户端,大功告成。要先运行服务器端程序,再运行客户端程序。命令如下:

./trans_server

./trans_client

client启动后,提示输入要传输的文件名,输入后,server将文件的第一行传回,大功告成!

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/symbol89/archive/2009/06/21/4285142.aspx

----------------------------------------------------------------------------------------------------------------------------------------------------

博主按照上面的指示一步一步做下来,还算顺利。但是在链接服务端文件时爆出一个错误,意思是trans_svc.c这个文件有个undefined reference to 'readfile_1_svc'错误,经本人亲测,是由于trans_svc.c文件第37行原本应该是local = (char*(*)(char *,struct svc_reg *))readfile_1;的,但是rpc编译器翻译成local = (char*(*)(char *,struct svc_reg *))readfile_1_svc ,所以把_svc去掉就好了。

这里不得不提的是ubuntu的vi编辑器相当不好用。即没有装vim,操作起来也没有red hat的vi编译器那样用的那么顺手。这里强烈推荐鸟哥的vi编辑器入门手册。把vi编译器介绍的很详细,附上地址:。

vi编辑器模式图(转载自鸟哥的私房菜)

vi模式下指令汇总(转载自鸟哥的私房菜)

最后强烈推荐《鸟哥的私房菜》这本书,相当棒的讲解linux的一套书(有专门的网站)。分上下册,上册讲解linux的基本知识和指令,下册讲linux架站的知识。很实用。

-----------------------------------------------------------------------------------------------------------------------------------------------------

最后运行./trans_server时系统会爆出cannot connect to...的错误(具体的我也忘了),这是由于linux默认把端口映射服务关闭的缘故。这时可以参照下面的解决方法:

$ sudo apt-get install nfs-kernel-server nfs-common portmap

$ sudo dpkg-reconfigure portmap

在出现如下提示的时候,注意选定“不将portmap 绑定在loopback 地址”

之后,系统会有如下提示:

Current registered services:

------------------------------------------------

100003 2 udp 2049 nfs

100003 3 udp 2049 nfs

100003 4 udp 2049 nfs

100003 2 tcp 2049 nfs

100003 3 tcp 2049 nfs

100003 4 tcp 2049 nfs

之后通过查看 /etc/default/portmap, 确保

#OPTIONS="-i 127.0.0.1"

前面的#号 被添加了

重启portmap服务:

$ sudo /etc/init.d/portmap restart

这样就可以了,但是要用root权限执行。

到这里所有我所遇到的问题都解决了,但是博主仍有疑问,如何实现windows和linux之间的rpc通信,这两个异构的系统如何才能建立变量传递通道,这相当困扰博主,如有好心人指点,将不胜感激。

本文出自 “只争朝夕” 博客,请务必保留此出处http://xiaovfight.blog.51cto.com/1625426/398745

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值