RPC编程遇到的问题与解决方法

更新时间:2023-12-08 18:10:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

RPC编程遇到的问题与解决方法

1. 基础工具

rpcgen的windows版本“oncrpc_win32_release_2”,下载地址http://www.sf.net/projects/oncrpc-windows。这是Windows下的rpcgen工具,可正常编译,需要在编译的选项上增加WIN32的定义,如图1所示:

另外在Include选项上增加“..\\..\\..\\..\\oncrpc\\win32\\include;”,如图2所示:

2. RPC编程的参考文档

linux与windows的RPC互通信的完整例子。参考“http://blog.csdn.net/ocean181/article/details/6785981”在linux下编写接口代码math.x,然后使用“rpcgen –a math.x”命令产生必要的rpc代码,如表1所示,客户端需要的代码为“math_clnt.c、math.h、math_xdr.c和math_client.c”,服务器端需要的代码为“math_svc.c、math.h、math_xdr.c和math_server.c”。 文件名 Makefile.file 作用 该文件用于编译所有客户机,服务器代码 该文件包含client_stub,程序员一般不用修改 该文件包含server_stub,程序员一般不用修改 该文件包含了从说明中产生的所有XDR类型 该文件包含了客户机和服务器stub所需的XDR过滤器,程序员一般不用修改 如果生成此文件,则该文件包含远程服务的stub 如果生成此文件,则该文件包含了骨架客户机程序。 math_clnt.c math_svc.c math.h math_xdr.c math_server.c math_client.c Linux服务端代码编译:gcc–o mathservermathsvc.cmath_xdr.cmath_server.c Linux客户端代码编译:gcc –o math_clnt.cmath_xdr.cmath_client.c

Windows客户端代码编译:建立新的空工程,将客户端的代码添加到工程中,添加oncrpc的include目录和lib目录,使用lib文件oncrpc.lib,使用动态库文件oncrpc.dll,修改编译错误。

3. 测试过程中遇到的问题

? 服务器无法启动,错误如下:

Cannot register service: RPC: Unable to receive; errno = Connection refused unable to register (TESTPROG, VERSION, udp).

问题原因:系统没有安装portmap或者没有启动portmap端口映射。 解决方法:在新版的ubuntu中portmap被rpcbind所代替,所以需要启动rpcbind服务。 ? 不能注册服务,错误如下:

Cannot register service: RPC: Authentication error; why = Client credential too weak unable to register (MATH_PROG, MATH_VER, udp).wh@wh-virtual-machine:~/RPCTest$

错误原因:不是portmap服务,而是rpcbind服务

解决方法:使用新的命令重新启动rpcbind服务,“rpcbind –i -w”。具体过程,“ps –ef |grep“rpcbind””“kill pid”“sudorpcbind –i -w”。 ? 客户端遇到的问题

当我们把linux下面的客户端代码复制到windows端编译,并运行的时候,程序没有反应退出。

错误原因:在Windows系统下的TCP/IP编程,需要首先调用WSA_STARTUP函数,通过调试oncrpc的clnt_create代码发现问题存在。

解决方法:在客户端的代码中调用clnt_create代码之前调用rpc_nt_init(),在客户端代码结束前调用rpc_nt_exit()。

本文来源:https://www.bwwdw.com/article/aeut.html

Top