2016-06-12 93 views
1

我用JAVA製作了一款遊戲。它有兩個玩家,一個是服務器。如何使用IP和端口直接與外部客戶端進行通信

計算機創建遊戲並提供服務。 另一臺計算機(外部)需要使用其IP和端口連接到服務器。 當它們連接時,遊戲開始並且客戶端播放器將其移動發送到服務器,移動在那裏被計算並且遊戲地圖中的新客戶端和服務器位置被返回並更新。

問題是:當我在同一個路由器上使用本地IP創建遊戲localy,服務器和客戶端時,遊戲會成功啓動。但是當我創建遊戲並嘗試從外部計算機連接時,找不到服務器。

我讀了一下,問題可能是計算機防火牆或路由器的NAT(我不太瞭解)。好吧,我發現了一個名爲STUN的東西,它說使用STUN服務器繞過防火牆和路由器阻塞,並且發現了一個免費的STUN服務器列表(here)。但我不知道該怎麼辦。 STUN服務器將啓用服務器和客戶端通信?

在沒有購買任何在線服務的情況下,以及與兩個玩家計算機(服務器播放器和客戶端播放器)進行連接時沒有端口阻塞或防火牆禁用是可能的嗎?

我想分享我的遊戲,但我不能要求每個玩家禁用他們的防火牆玩。 =/

+1

您只需在服務器端配置端口轉發/防火牆。客戶不需要做任何特別的事情。 – gudok

+0

這是關於網絡和網絡配置的問題,而不是編程。它是無關緊要的。 –

回答

2

如果您希望將服務器放置在網絡中的任何位置(尤其是在NAT後面),則需要使用稱爲「NAT遍歷」的黑魔法技術進行直接(對等)通信。

關於此的許多詳細信息在文章Peer-to-Peer Communication Across Network Address Translators中描述。您需要從那裏獲得「TCP Hole Punching」部分。

無論如何,NAT遍歷在所有情況下都不起作用(當NAT工作不像預期的遍歷算法時,總有例外)。因此解決所有問題的最佳方法是將專用服務器放置在具有公共IP地址的地方並使用它。

相關問題