在不同的机器上使用Pyro4时出现错误99

时间:2018-11-08 10:20:56

标签: python python-2.7 daemon nameservers pyro4

我正在使用的部分代码基于https://github.com/irmen/Pyro4/tree/master/examples/messagebus上的messagebus示例。我在一台机器上设置了一个Pyro4名称服务器。服务器和发布者也在此计算机上运行。

如果在此计算机上运行订阅服务器,则该订阅服务器将运行,但如果尝试在另一台计算机上运行该订阅服务器,则会出现错误。我需要在多个不同的机器上工作。

我得到的错误是:“错误:[Errno 99]无法分配请求的地址”

我的代码失败的行是:

    d = Pyro4.Daemon(host = NS_HOST, port = 6193)

其中NS_HOST是运行名称服务器等的主机的名称,6193是ns使用的端口。由于某种原因,除了本地主机,它似乎在任何地方都无法工作。我需要做些不同的事情吗? 我知道我可以连接到该主机的ns,因为我没有出现以下错误:

    Pyro4.locateNS(host = NS_HOST, port = 6193)

上面的行当前不在我的代码中(我只是用它来检查我是否没有错误的主机名,防火墙等问题),但是我想知道是否可以将其与Pyro4结合使用.Daemon()使代码正常工作-有什么想法吗?

我正在使用python 2.7。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

(通常有助于包括实际的堆栈跟踪信息,而不仅包括最终的错误消息。而且,“ Error 99”也没有描述性。)

但是,该错误消息是OSError的一部分,并非由Pyro本身引起。这是操作系统套接字库的错误情况,因为您试图在错误的网络接口地址上绑定Pyro守护程序:您正在提供在另一个节点上运行的名称服务器的地址。

守护程序的“主机”和“端口”参数与您提供给locateNS函数的参数不同。参见https://pyro4.readthedocs.io/en/stable/servercode.html#creating-a-daemon,通常您完全不必指定它们,只需让Pyro找出合适的默认值即可。