2015-08-28 118 views
2

我做的創建這裏給出一個客戶機/服務器的教程,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; 
      } 
     } 
    } 
} 

Server代碼:

// 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/

我能夠驗證相關的端口是開放的,並連接到我的服務器程序。

+0

請記住,你的朋友可能不會看到您的計算機,即使他知道由於NAT您的家庭連接的IP。 – npretto

+0

你怎麼能解決這個問題? –

+0

您必須搜索如何在路由器上進行「端口轉發」(每個品牌/型號都會更改),您基本上必須將公用ip的某個端口映射到您計算機的某個其他端口。如果你不知道什麼是NAT,我建議你去谷歌,我沒有任何鏈接,因爲我在學校學習它,但它很有趣,它可能是你不能不知道的情況下做的事情。 – npretto

回答

3

在客戶端在下面的字符串代碼 「localhost」 替換爲你的IP地址:

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

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

創建一個新的主機:該名稱可以是形式的IP「127.0 .0.1「或主機名稱,例如」google.com「,在這種情況下,使用DNS解析相應的IP地址。如果找不到主機名,則會發生異常。

+0

如果我用本地IP地址「192.168.1.254」替換「本地主機」,但如果用公共IP地址「206.XXX.XXX.XXX」替換「本地主機」,客戶端不會連接(這是我嘗試的第一件事)。我已經禁用了該端口上的傳入和傳出通信的防火牆,但似乎沒有什麼區別。 爲什麼我的客戶端實例只能在本地連接到服務器實例?我會雖然改變客戶端代碼使用計算機的公共IP地址通過路由器路由請求。 –

+2

公共IP地址指向您的路由器。您是否配置它將數據轉發到運行該服務的系統? https://en.wikipedia.org/wiki/Port_forwarding –

0

這真的取決於您的家庭設置。一般來說,這是一個安全風險,只是打開你的家庭IP的東西,所以這是你自己的風險。

很可能你會從你的isp獲得一個動態ip地址。這意味着每次連接到您的isp時,您的公共IP地址可能會有所不同。它通常使用第三方服務來繞過這種事情。許多路由器都有內置的功能來與這些提供商集成,但也有可以安裝的原生應用程序。有許多免費的服務,有些是根據你想要的和你信任的人支付的,例如http://www.noip.com/http://dyn.com/dns/。這些服務將有入門指南。

當它的工作,就可以從localhost改變你的客戶端代碼的公共IP地址和端口設置你的動態DNS服務來公開。

+0

非常感謝你,我會嘗試嘗試一下。 –