我在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
谢谢。
答案 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个元素的元组。