2009-07-26 120 views
4

本主題類似於this thread直接P2P連接

我是相當新的網絡編程的話題,永遠不必做任何事情,但基本的TCP/UDP單個本地機器上。現在我正在開發一個需要P2P網絡支持的應用程序。更具體地說,我將需要應用程序來連接和通過互聯網進行通信,最好不使用服務器來進行客戶端之間的匹配。

我知道並且假設幾乎所有的用戶都在路由器後面,這會使流程複雜化,因爲客戶端不能初始化到另一個的直接連接。

我知道UPnP是一個允許端口轉發的選項,無需用戶手動配置,但截至目前這不是一個選項。他們是否有辦法實現我的目標,還是我需要這臺服務器?

回答

5

您需要一臺服務器來交換IP地址等。正如其他線程從字面上指出的,保證連接的唯一方法是通過服務器進行代理。大多數點對點系統使用UPnPNAT穿孔(此方法需要一個服務器中繼端口信息,只能與UDP一起使用)在大多數情況下建立連接。

NAT穿孔由兩個客戶端建立到服務器的連接,然後都嘗試直接連接到另一個已轉發到其他端口。大多數UDP NAT都會在短時間內記住IP地址和端口,因此雖然數據從未將數據發送到另一端(對於UDP而言不是這一點),但其他客戶端會嘗試在幾分鐘之後將該報告連接到NAT會期待答覆。

2

忽略UPnP(只適用於某些路由器,不幸),並且沒有中央服務器,我不確定當兩個用戶都在NAT後面時,創建直接連接是不可能的。

+0

我知道NET衝孔/打孔技術,但它需要一臺服務器。 – 2009-07-26 01:07:54

+0

我錯過了第一次接受郵件的鏈接。沒有中央服務器(以幫助協商連接),我不相信這是可能的。 – Kitsune 2009-07-26 01:11:21

+1

當兩臺計算機無法直接連接到彼此,而沒有特殊配置的硬件或中間人來幫助他們時,我們生活的是多麼可悲的世界。 – 2009-07-26 01:13:34

1

那麼,爲了避免服務器「matchmake」,你可以做什麼Skype的,並設置一些同行作爲中繼NAT後面的其他人。你總是需要某種引導機制,所以中央服務器可能會以某種方式進入你的系統(當然取決於你的開發)。