Haxe:连接到远程主机

时间:2015-08-28 01:54:55

标签: sockets host haxe

我在这里创建了一个客户端/服务器教程,

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();
        }
    }
}

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

编辑:

如果我更换"本地主机"用我的本地IP地址" 192.168.1.254"这仍然有效,但如果我更换" localhost"使用我的公共IP地址" 206.XXX.XXX.XXX,"客户端没有连接(这是我尝试的第一件事)。

我已经为该端口上的传入和传出流量禁用了防火墙,但它似乎没有什么区别。为什么我的客户端实例只能在本地连接到服务器实例?我会改变客户端代码以使用计算机的公共IP地址通过路由器路由请求。

编辑:

事实证明它实际上与公共IP地址一起工作,但无论出于何种原因它无法从我的本地网络连接到路由器的公共IP(我仍然不明白为什么这是一个问题 - 也许是一些奇怪的路由器特定NAT问题)。使用此实用程序:

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

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

2 个答案:

答案 0 :(得分:3)

在客户端下面的代码中,将“localhost”替换为您的IP地址:

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

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

  

创建新主机:名称可以是“127.0.0.1”形式的I​​P或主机名,例如“google.com”,在这种情况下,使用DNS解析相应的IP地址。如果找不到主机名,则会发生异常。

答案 1 :(得分:0)

这实际上取决于您的家庭设置。一般来说,只需在你的家庭ip上打开一些东西就有安全风险,所以这需要你自担风险。

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

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