2012-06-21 36 views
1

我正在寫一個簡單的多人2D遊戲,4個玩家Pong準確。如何找到我的多人遊戲的主機IP

當遊戲開始時有一個開始菜單,您可以選擇主持或加入遊戲。 其中4人必須參加,其他3人將加入。我可以在房間裏向我的其他3位朋友大喊大叫,告訴他們我的IP和端口號,但我想知道是否有方法搜索主機。對我來說,這聽起來不可能,互聯網上有數百萬臺電腦,我怎麼可能找到一臺等待我的電話。我知道星際爭霸曾經在90年代中期這樣做。

我有一個關於如何實現這一點的理論。那就是使用像sql這樣的數據庫來跟蹤誰目前正在託管。這將是數據庫的唯一用途,因爲我不保留用戶統計信息或任何內容。

有沒有更好的方法來做到這一點?

+0

你們都在同一個局域網嗎? – Cameron

+0

是的,我相信是的,這是一個巨大的工作網絡,1000多臺電腦,如果這是同一個東西,我們就在同一個域上 –

+0

但是我想要超越本地網絡,或者至少能夠如果我想 –

回答

3

假設你在一個LAN上,你可以使用UDP來發現客戶端。

如果客戶端充當主機,它會偵聽UDP數據報。如果它收到一個包含發現請求的響應,它會以其IP,端口和客戶端需要的任何其他信息作出響應。 (您可以包括連接的玩家數量等)

如果客戶端充當客戶端,它將在「加入遊戲」屏幕時發送發現數據報。當主機響應時,它們被添加到選擇列表中。

當用戶選擇服務器時,通過IP連接,就像您已經在使用您在發現響應中收到的IP和端口一樣。

Lidgren network library提供了一些很好的發現功能,可能有用。

如果你不在局域網上,你需要某種中央目錄,可以在全球範圍內訪問 - 可能在網站上。當有人開始一個新遊戲時,他們的客戶將在目錄中註冊他們的IP等。然後,客戶端會輪詢該網站以獲取服務器列表,然後用它來填充「加入遊戲」屏幕。

值得注意的是,服務器/目錄方法在LAN環境中的工作方式與在Internet上的工作方式一樣。 UDP更靈活,因爲它不要求客戶端具有目錄提供者的任何知識,因爲它基本上是爲你「大喊大叫」。

1

在互聯網上使用某種服務器(web/ftp),您可以寫入文件。當您主持遊戲時,請在文件中寫入IP和端口。當客戶想要加入遊戲時,功能可以檢查文件並閱讀。這只是想到的第一件事情。

+0

是的。唯一(實用的)*通用*解決方案是擁有一箇中央管理機構來管理簿記。至少,據我所知:-) – Cameron

+0

這聽起來和數據庫一樣。 –

+0

其實我不認爲這是一個很好的主意。首先考慮兩種情況,兩個玩家將通過局域網連接播放,考慮有多少人通過本地地址共享相同的IP地址(例如幾乎所有的路由器都有「192.168.1.1」)。即使他們想通過互聯網播放,通常路由器也會阻止任何連接,只是因爲他們不知道如何處理來自互聯網上不知名地點的TCP請求。 – Ali1S232

2

您需要一箇中央代理來識別正在託管和正在參與的人。

您也可能希望通過該主機傳遞遊戲流量,因爲在打開端口和在其他防火牆後面的遠程計算機之間傳遞直接流量等方面存在很多問題。另外,如果您保留流量集中式的你可以進行一些制衡和對抗作弊。

1

如果僅用於局域網,每個客戶端都可能發送UDP廣播到網絡子網的廣播地址。

主機(或其他客戶端)偵聽相同的UDP端口。