我做的創建這裏給出一個客戶機/服務器的教程,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/
我能夠驗證相關的端口是開放的,並連接到我的服務器程序。
請記住,你的朋友可能不會看到您的計算機,即使他知道由於NAT您的家庭連接的IP。 – npretto
你怎麼能解決這個問題? –
您必須搜索如何在路由器上進行「端口轉發」(每個品牌/型號都會更改),您基本上必須將公用ip的某個端口映射到您計算機的某個其他端口。如果你不知道什麼是NAT,我建議你去谷歌,我沒有任何鏈接,因爲我在學校學習它,但它很有趣,它可能是你不能不知道的情況下做的事情。 – npretto