设为首页 收藏本站
查看: 751|回复: 0

[经验分享] linux与windows的RPC互通信的完整例子

[复制链接]

尚未签到

发表于 2018-6-10 11:11:45 | 显示全部楼层 |阅读模式
  由于中间件实验的要求,需要完成linux与windows之间的rpc通信,折腾了很久,终于搞定!写这篇文章的主要原因是,在查找资料的过程中,觉着网上的资料不全,也不详细(可能我没找到更好的吧),所以记下来,希望能够给大家有点帮助,也方便自己以后查阅。
  老习惯,上参考文章:(其实查了很多资料,只记得这几个了)
  地址一:http://zhwl-1212.blog.163.com/blog/static/226698772011111484754376/
  地址二:http://blog.csdn.net/ocean181/article/details/6785538
  地址三:http://baike.baidu.com/link?url=gcQ-tH2ioZqxpCfBGOFM_rhcUq6I4XEQATXP-GMm9Nw-xcxwSoBhdXCJ9lxA5sZ98WAUM929aWsLFO28oCOUKK
  地址四:http://blog.csdn.net/ocean181/article/details/6785981
  地址五:http://blog.csdn.net/cau99/article/details/5576187
  实验环境:

  linux端:fedora 16(虚拟机下),ip为192.168.100.200
  windows端:win 7,ip为192.168.100.1
  注意,windows端和linux端必须能够ping通,至于虚拟机的配置就不详述啦,不懂可以百度谷歌
  参考地址四,完成代码工作,这样你就拥有了math.x、math_xdr.c、math.h、math_clnt.c、math_svc.c、math_client.c、math_server.c至少这7个文件,按照地址四给出的步骤,不出意外的话,恭喜你,完成了linux下本机的rpc通信
  下面才是重点!!!
  一、windows到linux的rpc通信,linux为服务端
  1、将这7个文件全部拷到windows下,在VC6下新建一个空工程(rpc_math_client),将math.h、math_clnt.c、math_xdr.c、math_client.c这四个文件拷到你所建的工程目录(...\rpc_math_client)下,在vc6下工作区中右击Source Files,选择添加文件到目录将三个.c文件加入,右击Header Files,选择添加文件到目录,将math.h文件加入,点击编译,当然会出现很多错误。
  2、将oncrpc.sdk\include目录下的文件拷到VC6自己的include目录下,比如我的是C:\Program Files\Microsoft Visual Studio\VC98\Include,
  将oncrpc.sdk\win32lib目录下的pwrpc32.lib拷到VC6的lib目录下,我的是C:\Program Files\Microsoft Visual Studio\VC98\Lib,
  将math_xdr.c文件中的“register int32_t *buf;”这一行删除,
  在math_client.c文件的头部加上#pragma comment(lib,"pwrpc32.lib")这一行。这样编译就能通过了。
  还需要将math_client.c的main函数改成

int main (int argc, char *argv[])
{
char *host="192.168.100.200"; //host为你的服务端的地址
math_prog_1 (host);
exit (0);
}  意思就是把host写死,不用再命令行下输参数了。点击运行(在这之前,需要将你linux下的服务端起起来,命令行输./math_server &),会提示缺失“pwrpc32.dll”文件,将oncrpc.sdk\bin目录下的该文件放入你所建工程的debug目录下即可。

  运行后,根据要求输入数据,等了很长时间都没反应,最后会提示“RPC: Port mapper failure - RPC: Timed out”,在地址五中有解决的方法。
  再次运行,就大功告成!恭喜你,完成了windows到linux的rpc通信。
  二、linux到windows的rpc通信,windows为服务端
  1、在VC6下新建一个空工程(rpc_math_server),将math.h、math_svc.c、math_xdr.c、math_server.c这四个文件按照上述的方法加入工程。
  2、将math_xdr.c文件中的“register int32_t *buf;”这一行删除
  在math_server.c文件的头部加上#pragma comment(lib,"pwrpc32.lib")这一行
  将math_svc.c文件的#include <sys/socket.h>和#include <netinet/in.h>这两行注释掉
  双击oncrpc.sdk/bin目录下的portmap.exe,启动portmap
  运行,同样需要将“pwrpc32.dll”文件放入debug目录下。
  在linux下运行客户端(./math_client 192.168.100.1),即可得到结果。
  至此,windows与linux的rpc互通信完成。可以看出,即使在windows下没有rpcgen工具也可以完成。在给出的sdk中是有rpcgen.exe的,但是个人感觉生成起来特别麻烦,各种缺少库,最后终于生成了想要的文件,编译也是一大堆错误,索性也就把linux下生成的文件直接拷到windows下了。
  文中所要用到的oncrpc.sdk以及两个例子的代码可在http://down.51cto.com/data/1034805下载,希望能够帮助到大家。
  



附件:http://down.51cto.com/data/2363840

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-521681-1-1.html 上篇帖子: Windows Server 2019 下篇帖子: 在 Windows 7 和 Windows Server 2008 R2 上安装 Windows PowerShell 3.0
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表