2012-04-08 266 views
0

我目前正在開發一款基於Java的遊戲,可以在沒有服務器的情況下播放P2P。到目前爲止,我已經能夠得到它的工作,其中一人進入對方的IP,這是我與呼叫如何創建一個跨網絡的P2P遊戲?

InetAddress.getLocalHost().getHostAddress()); 

得到然而,這隻能在同一網絡中的兩臺電腦。我將如何獲得跨網絡工作的IP? 感謝您的幫助!

編輯: 這是一個1v1的遊戲,所以多重連接不成問題。我想讓用戶通過Skype或其他東西發送IP地址......這只是我想和朋友們一起使用的東西。防爆。它顯示IP,你將它發送給你的朋友,他使用它連接。

回答

0

這個問題是要找到你想要的IP:How to get the ip of the computer on linux through Java?

你還需要使用某種類型的端口轉發到連接到不同網絡上的計算機。

+0

這是行不通的,因爲如果您通過網關(如路由器或接入點)發送包裹,則無法獲取互聯網地址。你會得到相同的10.0.0.something或192.0.0.something本地IP地址。你需要訪問一些服務器,讓他們告訴你你的IP。 – 2012-04-08 18:46:03

1

即使洪流P2P網絡使用服務器來確定對端的IP地址。獲得IP地址後,連接是在同伴之間進行的。所以我建議至少有一個Web服務來列出對等體的IP地址。 (或者你可以把類似於listActivePeers.php/aspx/etc文件的東西放到你的網站上,每5分鐘ping一次,並列出ping過的ip地址。)

我也想指出每個對等節點都需要打開與另一個節點的連接,除非你有幾個玩家,否則這個連接並不那麼有效。如果你有100個在線玩家,你將最終爲每個同伴建立100個連接,有時某些接入點或調制解調器不支持這種活動連接!他們可能會卡住或放慢速度。

此外,您將需要處理大量的併發問題。認爲兩個數據同時來到兩個同行。在做出任何舉動之前,同行們需要互相檢查「如果我可以做出這樣的舉動?或者我應該知道,你們中的任何人做出任何舉動?」。因此,在每一步之前,您都會通過發送一些信息來鎖定其他同事,並且他們每個人都會在做出行動之前這樣做。

更新(來自我上面的評論)
檢查此鏈接關於飛快您的IP地址。 https://stackoverflow.com/a/2939223/1216609谷歌的「調制解調器端口打開或轉發[品牌/型號的接入點/調制解調器]」查詢轉發特定於您的調制解調器或路由器的端口。

+0

這是一個1v1的遊戲,所以多重連接不成問題。我想讓用戶通過Skype或其他東西發送IP地址......這只是我想和朋友們一起使用的東西。防爆。它顯示IP,你將它發送給你的朋友,他使用它連接。 – mattdee123 2012-04-08 09:38:23

+0

如上所述,如果您甚至不使用某個中央連接列表系統,那麼很好地顯示IP並手動發送它是最佳解決方案。但是很可能玩家會遇到問題,因爲我們大多數人現在都在路由器防火牆後面,他們需要打開遊戲的端口,或者您的遊戲可以使用UPnP,而不是永久的解決方案,但總比沒有好。發送IP的玩家需要路由器可訪問的遊戲端口。 – 2012-04-08 09:56:24

+0

是的,我的問題是,這種方法只適用於同一個網絡。用戶輸入的地址就像「10.0.1.10」或其他東西。我將如何跨網絡進行這項工作。我假設身份證需要另一個IP地址? – mattdee123 2012-04-08 12:49:40