1

所以我长达一年的项目涉及到用 Erlang 做一些非常讨厌的事情。我刚刚开始掌握它。我对网络的了解非常有限,需要询问某些东西如何/为什么不起作用。

我遵循本指南中的代码http://20bits.com/article/network-programming-in-erlang,它为服务器提供 Erlang 代码以回显输入的文本

运行它的指令是启动erlang代码,他推荐8888端口,然后telnet到localhost,瞧,访问echo服务器

我的问题是,在我的机器上运行这个服务器并让一个朋友 telnet 进入服务器是否容易?

我认为这应该像给他我当前的 IP 地址并用它来远程登录一样简单,但它没有用

老实说,我不认为这是我应该做的关于与 erlang 联网的正确研究方向,但大多数地方似乎都在谈论本地运行的事情

我的理想指南是谈论使用多个 Erlang 节点,以及某种非常基本的客户端/网络设置

4

1 回答 1

4

如果您的朋友试图通过 Internet 连接到您,答案是否定的,您不能简单地给他您的 IP 地址并让他能够连接。

原因是由于NAT,或网络地址转换。大多数计算机没有直接连接到互联网,而是先通过路由器。路由器为您的计算机提供本地 IP 地址,通常以 192.168 或 10 开头。当您在互联网上询问服务您的 IP 是什么时,它会向您报告路由器的面向互联网的地址,而不是您正在浏览的机器.

        IP seen from upstream
YOU     10.x.x.x
 |
Router  81.157.x.x
 |
Internet

这意味着当有人尝试使用您的外部 IP 地址连接到您的 telnet 服务器时,请求会到达您的路由器,而您的路由器不知道如何处理它。然后连接被拒绝。

Internet -> 81.157.x.x:8888 -> Router -> ?

解决这个问题的方法是调用端口转发。这是路由器上的一个配置选项,它将对给定端口的请求转发到本地网络上的 IP 地址。您可以通过在您自己的机器上本地检查网络配置来找到该地址。不要使用在线网站,因为这会给你路由器的公共 IP 地址:

Internet -> 81.157.x.x:8888 -> Router -> 10.x.x.x:8888 -> You

请注意,如果您无法控制您的网络,例如您在学校或工作,您需要网络管理员来执行此操作。除非它是为了真正重要的事情,否则他们可能不想设置它。如果您允许访问敏感端口(例如 ssh(22)),像这样打开网络可能会很危险。此外,企业网络通常比家庭网络复杂得多,因此设置起来很麻烦。

如果你们都在同一个本地网络上,比如连接到同一个大学或工作网络,你应该能够连接到本地配置(例如 ifconfig)给出的 IP,而不是谷歌的 IP。

如果您只是和朋友一起测试,一个变通方法是使用VPN 或虚拟专用网络LogMeIn 提供了一个名为 Hamachi的免费解决方案。您和您的朋友都需要下载并安装此应用程序。您应该创建一个专用网络,并让其他人加入。确保您的 echo 服务器正在侦听 0.0.0.0,这意味着在所有 IP 地址上。然后客户端应该能够通过服务器的 Hamachi IP 连接到服务器。

即使您无法控制自己的网络配置,VPN 解决方案也应该可以工作。它比设置端口转发更安全,因为只有您 VPN 中的人才能访问您的端口。

最后一点,请确保您的本地防火墙已禁用,或者至少允许您的应用程序和端口 8888 通过。

于 2013-10-30T00:48:53.807 回答