尝试运行简单的RPC程序时出错

时间:2012-05-04 12:18:31

标签: c ubuntu rpc

我正在尝试运行一个使用rpcgen创建的简单RPC程序。 这是一个简单的因子计划。这是我的第一个RPC程序。 make工作正常。还创建了可执行文件。 但是在尝试运行可执行文件时,我收到了这个错误:

$sudo ./fact_server 
Cannot register service: RPC: Unable to receive; errno = Connection refused
unable to register (FACTPROGRAM, FACTVERSION, udp).

我尝试在具有相同操作系统(ubuntu)的另一台PC上运行相同的程序。它在那里运行完美。

7 个答案:

答案 0 :(得分:24)

首先检查portmapper是否正常工作,使用rpcinfo进行检查。 如果您收到任何错误,请安装portmap

答案 1 :(得分:6)

使用rpcinfo检查服务是否正在运行。这就是我得到的。

$ rpcinfo 
   program version netid     address                service    owner
    100000    4    tcp6      ::.0.111               portmapper superuser
    100000    3    tcp6      ::.0.111               portmapper superuser
    100000    4    udp6      ::.0.111               portmapper superuser
    100000    3    udp6      ::.0.111               portmapper superuser
    100000    4    tcp       0.0.0.0.0.111          portmapper superuser
    100000    3    tcp       0.0.0.0.0.111          portmapper superuser
    100000    2    tcp       0.0.0.0.0.111          portmapper superuser
    100000    4    udp       0.0.0.0.0.111          portmapper superuser
    100000    3    udp       0.0.0.0.0.111          portmapper superuser
    100000    2    udp       0.0.0.0.0.111          portmapper superuser
    100000    4    local     /run/rpcbind.sock      portmapper superuser
    100000    3    local     /run/rpcbind.sock      portmapper superuser
        24    5    udp       0.0.0.0.3.99           -          superuser
        24    5    tcp       0.0.0.0.3.100          -          superuser

如果服务未运行,则必须使用rpcbind启动它。在Ubuntu上,我需要root权限才能运行该服务。

答案 2 :(得分:4)

在最新的rpcbind Linux版本中有一个 bug / feature - 它现在在系统启动后没有活动/运行,但应该以某种方式被激活" socket激活"根据/ usr / lib / systemd / system /中的systemctl配置rpcbind.service文件:

[Install] 
Also=rpcbind.socket

检查此线程是否同一个错误/功能导致Ubuntu问题(https://bugs.launchpad.net/ubuntu/+source/rpcbind/+bug/1558196)。

对您的(我们的)rpcbind问题的简短回答是 - 为了运行RPC服务器代码,对系统的systemctrl配置进行此修改:< / p>

sudo systemctl add-wants multi-user.target rpcbind

现在,设置rpcbind运行的预期方法是以某种方式访问​​/var/run/rpcbind.sock,我非常感谢一些Unix / Linux大师可能会启发我的RPC服务器应用程序代码应该做什么才能实现这个rpcbind&#34; socket激活&#34;效果。

答案 3 :(得分:1)

由于“portmap”或“rpcbind”等实用程序不可用而出现问题。

  • 安装portmap或rpcbind。它将解决问题。

答案 4 :(得分:1)

如何安装rpcgen

在终端上输入此命令。

sudo apt-get install rpcbind

但有时候上面的代码无法帮助你破解rpcgen。

enter image description here

那时你必须按照这些步骤进行操作。然后你可以轻松安装它。 你应该按照这一步骤进行操作

1)sudo apt-get update
2)sudo apt-cache搜索apache2 3)sudo apt-get install rpcbind

最后,您可以使用此命令 rpcinfo

进行检查

enter image description here

答案 5 :(得分:1)

只需安装以下内容并尝试。

sudo apt install libc-dev-bin

有关更多信息,请查看以下GitHub。 https://github.com/riyazathali/RPC-HelloWorld

答案 6 :(得分:0)

我也使用rpcinfo时出错。最后,我不得不跑步:

/etc/init.d/rpcbind start

here中的建议。

获取后:

[info] Already running: rcpbind.

rpc服务器二进制文件能够注册。