16

试图让两个 erlang 节点相互交谈:一个在 Ubuntu 机器上,一个在 Windows XP 上。

我们收到“来自不允许节点的连接尝试”消息,该消息阻止一个节点接收来自另一个节点的消息。

他们都使用 5.XXX 版本的 Erlang OTP。

两个节点都有相同的 cookie (.erlang.cookie)

我们正在启动接收器节点:

erl -name fred@ipaddress

并使用 'fred@ipaddress' 调用函数(单引号)

我们已经关闭了防火墙。

那么还有什么可能阻止连接?

更新:我们使用 erlang:get_cookie() 来检查两个节点上的 cookie,并且值不同。这就是问题所在。我们认为我们通过将相同的 .erlang.cookie 文件放在我们在两台机器上运行 erlang 的目录中来设置 cookie。但也许这是错误的地方?

更新 2:感谢大家的回答。我们选择 Ranok 作为我们的答案,因为它对我们很有效。我敢肯定,一些设置 cookie 的替代方法也可以。

4

6 回答 6

12

此外,当您启动 Erlang 系统时,有一个命令行标志-setcookie可以让您在启动时指定 cookie。

erl -name fred@ipaddress -setcookie FOOBAR

希望有帮助,雅各布

于 2009-01-17T15:38:12.167 回答
5

首先检查每个节点的 cookie。从外壳:

erlang:get_cookie().

如果它们不相同,则更改节点的其中一个 cookie 以匹配另一个:

erlang:set_cookie(node(), "newcookie").

如果一切正常,您需要查看为什么没有从配置文件或命令行参数中选择 cookie 设置。

于 2009-01-16T23:41:01.600 回答
3

Erlang cookie 应该在 users 目录中。不是应用程序目录。

所以你的是这样的:

C:\Documents and Settings\InterstarUser\.erlang.cookie

env如果我从 Windows 时代没记错的话,您可以在命令行中使用命令查看 HOME 的位置。

于 2009-01-17T18:44:43.553 回答
2

net_adm:ping()

从两个节点尝试 net_adm:ping()。

http://www.erlang.org/documentation/doc-5.4.13/lib/kernel-2.10.13/doc/html/net_adm.html

于 2009-01-18T19:28:30.963 回答
2
erlang:set_cookie(node(), 'newcookie').

不是

erlang:set_cookie(node(), "newcookie").
于 2009-08-11T08:22:58.810 回答
1

我想到了几件事:

  1. 您是否尝试过在两个节点上通过 erlang:set_cookie 设置 cookie?
  2. 如果在 $HOME 目录中没有找到 .erlang.cookie 文件,则会创建一个。会不会是 .erlang.cookie 文件之一不在一台机器上的正确位置?您可以在硬盘驱动器中搜索该文件,如果您找到的不仅仅是您创建的文件,erlang 可能已将它放在那里并正在使用它。
于 2009-01-16T20:04:30.913 回答