Erlang通过外部ip地址连接

时间:2011-01-17 17:24:08

标签: erlang ip

我在erlang中编写简单的服务器应用程序。

此应用程序的代码:https://gist.github.com/783117

我尝试使用telnet连接到它。当我连接到本地主机或从路由获取的本地IP地址时,它没问题,但是当我尝试使用外部IP连接到服务器时,它不起作用。

怎么了?

如果我使用{0,0,0,0}的选项:

Opts = [binary, {ip, 0,0,0,0}, {reuseaddr, true},
            {keepalive, false}, {active, false}],

我明白了:

例外退出:badarg

  

netstat -ltn | grep 110

tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN

route -n

Kernel IP routing table

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface

192.168.1.0     0.0.0.0         255.255.255.0   U     202    0        0 eth0

0.0.0.0         192.168.1.1     0.0.0.0         UG    202    0        0 eth0

谢谢。

2 个答案:

答案 0 :(得分:1)

来自gen_tcp manual

  

listen(端口,选项) - > {ok,ListenSocket} | {错误,原因}

     

...

     

设置套接字以侦听本地主机上的端口Port。

     

...

     

{ip,ip_address()}

     

如果主机有多个网络接口,则此选项指定要监听的接口。

我认为您的服务器只在本地主机上侦听。也就是说,您无法使用其他地址进行连接。您可能需要使用ip选项。也许有可能像在C中那样使用INADDR_ANY,但我不知道。

[编辑]

即使没有ip选项,它似乎默认侦听INADDR_ANY(感谢I GIVE CRAP ANSWERS)。 我可以使用作者共享的原始代码从其他计算机连接。但是我的机器上禁用了防火墙

答案 1 :(得分:0)

而不是{ip,0,0,0,0},您应该传递:{ip,{0,0,0,0}}。你传递了一个有5个元素的元组,而不是2个元素的元组。