尝试让两个 erlang 节点相互通信:一台在 Ubuntu 机器上,一台在 Windows XP 上。

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

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

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

我们用以下命令启动接收器节点:

erl -name fred@ipaddress

并使用 'fred@ipaddress' (在单引号中)调用其上的函数

我们已经关闭了防火墙。

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

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

更新2:谢谢大家的回答。我们选择 Ranok's 作为我们的答案,因为它对我们来说效果很好。我确信设置 cookie 的一些替代方法也很好。

有帮助吗?

解决方案

此外,当您启动二郎系统中,有一个命令行标志-setcookie这将让你指定在启动时该cookie。

erl -name fred@ipaddress -setcookie FOOBAR

希望帮助, 雅各布

其他提示

通过检查每个节点的cookie开始关闭。从壳:

erlang:get_cookie().

如果它们不相同,则改变节点的Cookie中的一个相匹配的其他:

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

如果一切正常,你需要明白为什么该cookie设置不从配置文件或命令行参数挑选的。

在二郎饼干应该是在用户的目录。不应用程序目录。

所以你的是这样的:

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

您可以看到首页的位置,同时在命令行命令env,如果我从我的Windows日子记错。

<强> net_adm:平()

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

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

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

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

我想到了一些事情:

  1. 您是否尝试过在两个节点上通过 erlang:set_cookie 设置 cookie?
  2. 如果在 $HOME 目录中没有找到 .erlang.cookie 文件,则会创建一个。难道是 .erlang.cookie 文件之一不在一台机器上的正确位置吗?您可以在硬盘驱动器中搜索该文件,如果您找到的文件多于您创建的文件,则 erlang 可能已将其放在那里并正在使用它。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top