2009-06-11 58 views
1

是否有任何標準協議與巫婆,你可以使用遊戲(如http,ftp),因爲我有問題,當我測試一個隨機端口(1024-65300)連接出(我不得不轉發端口上我的路由器,它只能與一臺計算機一起工作)。遊戲協議

應該有,即時通訊程序使用的東西,就沒有必要設立任何港口...

你有任何想法,我可以用什麼?我用C++

p.s.我會對類似於http的東西感興趣,有人發送請求,另一個發送響應。我看到在HTML中,你必須發送到IP/index.html或類似的東西,我真的不知道如何使用...

+1

「Html」是文檔格式,不是網絡協議。通常用於傳輸html的協議稱爲http(「超文本傳輸​​協議」)。 – unwind 2009-06-11 12:54:33

+1

@unwind:錯誤。 HTTP是「超文本傳輸​​協議」,它是一種應用協議,而不是傳輸協議。 – aehlke 2009-07-30 14:10:40

回答

7

IM程序不需要任何開放的端口,因爲它們是客戶端程序。作爲一般規則(注意出站防火牆),所有端口都可以在客戶端進行傳出連接。爲了實際上接受連接,端口必須允許傳入流量。例如,大多數服務器都可以接受所有端口上的傳入流量。網絡通信和協議的設計考慮到這一點:客戶端(您的瀏覽器)始終啓動與服務器(網站)的連接,而不是相反。

至於協議,你應該使用TCP/IP或UDP,這取決於你需要做什麼。如果您計劃通過使用近似值(大多數FPS遊戲執行此操作,以及任何需要非常快速反應的遊戲)將TCP/IP更簡單,則會大大降低UDP傳播錯誤,並且更容易滯後。兩者之間的主要區別在於UDP是「消失而忘記」,這意味着它不會檢查消息是否實際到達目的地。

至於上面的協議,你提到了http和ftp。我會非常建議使用兩個。當您在自定義端口上使用直接套接字通信時,您可以自由制定自己的協議供遊戲使用。只要它通過來回發送數據包完成工作,其他的一切完全取決於您,而且應該是。畢竟,一個遊戲協議需要快速,你不希望所有這些額外的頭垃圾從HTTP堵塞你的網絡傳輸,除非你真的需要它。

只要記住:網絡連接需要兩部分,客戶端和服務器。這意味着你可以爲遊戲設置一箇中央服務器,或者你有一個玩家「主持」遊戲(充當服務器,他需要打開他的端口)。其他玩家(所有玩家,在中央服務器設置中)連接到中央人員,並通過他傳遞通信。這意味着你的遊戲協議需要兩個部分,一個服務器端和一個客戶端。大多數遊戲中的客戶端都是盲目的,因爲它會發送關於用戶的玩家信息,然後依靠服務器更新來告訴它遊戲中的其他所有內容。服務器應負責收集來自所有客戶的玩家信息,然後將這些信息分發給其他人。這可以包括驗證(大多數情況下)以防止遊戲中發生「非法」事情,但這取決於你。

0

一些路由器可以處理UPnP請求來打開端口。

+1

我需要一些適用於每個路由器的東西(正如我所說的im程序和資源管理器工作(資源管理器使用html,我不知道如何在遊戲中如何處理)) – csiz 2009-06-11 12:45:29

1

這個問題比使用特定的端口或協議通過NAT更復雜一點。你可以得到more information here.

0

大多數多人遊戲使用UDP和端口不同,有些需要比其他更多。服務器端傾向於要求轉發開放端口。

爲了做到這一點,你顯然會深入研究套接字編程。 玩得開心:)

0

另一個UDP優勢和防火牆技巧是,對於大多數防火牆來說,如果內部客戶端發送UDP數據包,防火牆將在外部打開一個UDP端口,它可以接受和轉發外部數據包回到源。

因此,如果您的所有客戶端都將UDP發送到中央服務器,則該服務器可以收集所有UDP端口信息並將其發送回每個客戶端(同樣通過UDP)。然後每個客戶端發送一個UDP數據包到每個其他客戶端以打開防火牆端口。這可以讓每個客戶端直接與其他客戶端通信,而不是通過服務器。它仍然需要一個服務器,每個客戶端都可以用作會議點。

這個技巧被Skype和其他IM協議以及一些需要P2P訪問的B​​itTorrent客戶端使用得很好。

它的一個問題是,所有的流量都是UDP,這使得連接不可靠,所以如果你需要可靠性,你需要在它上面實現自己的TCP版本。我相信有一些圖書館可以做到這一點。或者你可以運行OpenVPN之類的東西,儘管對於一款遊戲來說這似乎過分了。