我正在尝试使用在Mac OsX 10.6上添加两个数字的RPC来运行程序
这就是我在做的事情:
rpcgen -a -C add.x
生成文件
add.h,add_clnt.c,add_svc.c,add_server.c,add_client.c
然后使用以下命令编译所有文件:
gcc -g -DRPC_SVC_FG -c -o add_clnt.o add_clnt.c
gcc -g -DRPC_SVC_FG -c -o add_client.o add_client.c
gcc -g -DRPC_SVC_FG -c -o add_xdr.o add_xdr.c
gcc -g -DRPC_SVC_FG -o add_client add_clnt.o add_client.o add_xdr.o
gcc -g -DRPC_SVC_FG -c -o add_svc.o add_svc.c
gcc -g -DRPC_SVC_FG -c -o add_server.o add_server.c
gcc -g -DRPC_SVC_FG -o add_server add_svc.o add_server.o add_xdr.o
在一个远程控制台中运行服务器
./add_server
在另一个控制台中运行客户端
./add_client localhost 23 35
23和35是我希望在第二个控制台上打印的数字。 执行以下操作时,服务器控制台上不会显示任何内容。
如果我在运行客户端时尝试使用ip地址而不是localhost 错误是:
RPC:Port mapper Failure
我正在使用MacOSX 10.6
答案 0 :(得分:1)
你快到了。
这是在Solaris系统上完成的,您应该在MacOSX上看到类似的内容。
在远程主机上启动add_server后,检查add_server是否已成功注册远程端口映射程序。 E.g。
remote> cat add.x
struct add_args {
int a;
int b;
};
typedef struct add_args add_args;
bool_t xdr_add_args();
#define ADDPROG ((u_long)0x20000001)
#define ADDVERS ((u_long)1)
#define ADD ((u_long)1)
extern int *add_1();
remote> ./add_server &
remote> rpcinfo -t localhost 536870913
program 536870913 version 1 ready and waiting
536870913是十进制的0x20000001。查看是否可以从本地主机访问远程主机。如果是,则运行add_client。
local> ping remote
remote is alive
local> rpcinfo -t remote 536870913
program 536870913 version 1 ready and waiting
local> ./add_clnt remote 23 35
答案 1 :(得分:0)
当rpcbind守护程序(负责提供有关所请求服务正在侦听的端口的信息)未向主叫计算机发出响应时,可能会出现此类错误。
由于NAT或防火墙中的错误,可能会发生这种情况。因此,第一次尝试诊断问题,就像关于网络的任何事情一样,可能涉及通过对所涉及的每个接口进行ping操作来验证连接是否正常,从最近到最远,确保每次跳转都能正常工作。