2017-04-24 155 views
0

谁能帮助?我卡住了。我有一个EC2实例和一个客户端/服务器Sun RPC应用程序,可以在本地正常工作。设置SUN RPC在Amazon EC2实例

服务器部分运行在EC2实例OK(启动,等待客户端连接

我的家用电脑上运行始终在客户端部分说:

localhost: RPC: Remote system error - Connection refused 

-p上我已经运行的rpcinfo客户端和服务器,他们看起来OK对我说:

EC2服务器:

program vers proto port service 
    100000 4 tcp 111 portmapper 
    100000 3 tcp 111 portmapper 
    100000 2 tcp 111 portmapper 
    100000 4 udp 111 portmapper 
    100000 3 udp 111 portmapper 
    100000 2 udp 111 portmapper 
536871049 2 udp 36832 
536871049 2 tcp 43244 

客户端:

program vers proto port service 
    100000 4 tcp 111 portmapper 
    100000 3 tcp 111 portmapper 
    100000 2 tcp 111 portmapper 
    100000 4 udp 111 portmapper 
    100000 3 udp 111 portmapper 
    100000 2 udp 111 portmapper 
     199 1 udp 35634 
     199 1 tcp 43545 
536871049 2 udp 52507 
536871049 2 tcp 57459 
536871048 1 udp 49297 
536871048 1 tcp 54609 

我在EC2实例上打开了TCP入站端口111。它看起来从客户端打开:nping -p 111 ec2-XX-XXX-XX-XX.us-west-2.compute.amazonaws.com返回响应。

任何人任何想法?

+0

我认为错误消息已经告诉你问题:你的应用程序试图连接到RPC主机名'localhost'。检查你的应用程序设置 – mootmoot

+0

'portmapper'动态地将端口分配给RPC服务,或者是服务动态分配它们自己的端口并将它们注册到'portmapper'中。所有这些都是在20世纪80年代早期的防火墙之前设计的。 30年后,Sun-RPC确实不适合在互联网上部署这个原因。 – EJP

回答

0

啊,因为mootmoot指出的那样,我在本地运行我的客户。

然而,当我改变了这一切,它仍然没有奏效。除了端口111,您还必须打开服务运行的端口。我的程序有一个号码536871049,所以我必须为TCP(我使用的协议)打开端口43244。

但是,每次你重新启动该服务,端口号改变为模板服务器代码调用:

transp = svctcp_create(RPC_ANYSOCK, 0, 0); 

结合的服务到arbitary端口。所以我必须在已知的端口上设置自己的套接字,然后更改上面的调用以使用该套接字。

然后你就可以进入AWS的开放,加上入站连接到EC2服务器上的端口111的端口设置以上。这一切然后工作正常!