0

任何人都可以帮忙吗?我被困住了。我有一个 EC2 实例和一个在本地运行良好的客户端/服务器 Sun RPC 应用程序。

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

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

localhost: RPC: Remote system error - Connection refused

我在客户端和服务器上都运行了 rpcinfo -p,它们对我来说看起来不错:

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 返回响应。

有人有什么想法吗?

4

1 回答 1

0

啊,正如 mootmoot 指出的那样,我在本地运行我的客户端。

但是,当我改变它时,它仍然不起作用。除了端口 111,您还必须打开运行服务的端口。我的程序有一个编号 536871049,所以我必须为 TCP(我使用的协议)打开端口 43244。

但是,每次重新启动服务时,端口号都会随着模板服务器代码的调用而改变:

transp = svctcp_create(RPC_ANYSOCK, 0, 0);

它将服务绑定到任意端口。因此,我必须针对已知端口设置自己的套接字,然后更改上面的调用以使用该套接字。

然后您可以进入 AWS 并在端口 111 上打开到 EC2 服务器的入站连接以及上面的端口设置。然后一切正常!

于 2017-04-25T08:05:59.560 回答