Haxe:连接到远程主机

Haxe: connecting to a remote host

我创建了此处给出的 client/server 教程,

http://old.haxe.org/doc/neko/client_server,

但此示例仅适用于实用性非常有限的本地主机的情况。我希望有人可以解释如何将其扩展到连接到远程主机的情况。具体来说,如果有人知道如何修改这个例子,这样我就可以 运行 从家里的笔记本电脑上获取服务器代码,并且有一个朋友(知道我家的 ip) 运行 客户端。

客户代码:

// file Client.hx
class Client {
    static function main() {
        var s = new sys.net.Socket();
        s.connect(new sys.net.Host("localhost"),5000);
        while( true ) {
            var l = s.input.readLine();
            trace(l);
            if( l == "exit" ) {
                s.close();
                break;
            }
        }
    }
}

服务器代码:

// file Server.hx
class Server {
    static function main() {
        var s = new sys.net.Socket();
        s.bind(new sys.net.Host("localhost"),5000);
        s.listen(1);
        trace("Starting server...");
        while( true ) {
            var c : sys.net.Socket = s.accept();
            trace("Client connected...");
            c.write("hello\n");
            c.write("your IP is "+c.peer().host.toString()+"\n");
            c.write("exit");
            c.close();
        }
    }
}

作为免责声明,我对通信协议知之甚少,所以如果这个问题很愚蠢,我深表歉意。

编辑:

如果我将 "local host" 替换为我的本地 IP 地址“192.168.1.254”,这仍然有效,但如果我将 "localhost" 替换为我的 public IP 地址“206.XXX.XXX.XXX," 客户端无法连接(这是我尝试的第一件事)。

我已经为该端口上的传入和传出流量禁用了防火墙,但这似乎没有什么不同。为什么我的客户端实例只能在本地连接到服务器实例?我本来希望更改客户端代码以使用计算机的 public ip 地址通过路由器路由请求。

编辑:

事实证明它实际上一直在使用 public ip 地址,但由于某种原因它无法从我的本地网络连接到路由器的 public ip(我仍然不不明白为什么这是个问题——也许是一些奇怪的路由器特定 NAT 问题)。使用此实用程序:

http://www.yougetsignal.com/tools/open-ports/

我能够验证相关端口是否打开并连接到我的服务器程序。

在以下字符串中的客户端代码中,将 "localhost" 替换为您的 IP 地址:

s.connect(new sys.net.Host("localhost"),5000);

http://api.haxe.org/sys/net/Host.html

Creates a new Host : the name can be an IP in the form "127.0.0.1" or an host name such as "google.com", in which case the corresponding IP address is resolved using DNS. An exception occur if the host name could not be found.

这实际上取决于您的家庭设置。通常,仅在您的家庭 ip 上打开某些内容存在安全风险,因此请您自担风险。

您很可能会从您的 isp 获得一个动态 IP 地址。这意味着每次您连接到您的 isp 时,您的 public ip 可能会有所不同。使用第三方服务来绕过这种事情是很常见的。许多路由器内置了与这些提供商集成的功能,但您也可以安装本机应用程序。有很多服务,有些是免费的,有些是付费的,这取决于你想要什么和你信任谁,例如 http://www.noip.com/, http://dyn.com/dns/。这些服务将有入门指南。

当它工作时,您可以将您的客户端代码从 localhost 更改为您设置动态 dns 服务以公开的 public IP 地址和端口。