2012-05-24 59 views
1

我是一個非常簡單的問題。我實現了一個系統,而無需使用它們之間的直接連接在哪裏可以發送兩個客戶端之間的數據(不包括在客戶端上打開防火牆端口),以下這種模式:Winsock + C +客戶端到客戶端+發送和接收數據

客戶端1 ------>服務器--- --->客戶端2 或者 客戶端1 < ------服務器< ------客戶端2

沒有什麼錯這個模型一個好的工作。問題是服務器上的開銷大大增加,因爲它需要從客戶端接收數據,然後立即轉到下一個。

我的問題:有沒有給客戶之間發送數據的速度更快的方式?或者將數據從客戶端發送到另一個,而不使用它們之間的直接連接?

回答

0

1 - 你的問題似乎並沒有有什麼用C/C++/winsock的。

2 - 你可能做的最好的方式,現在,隨着負載的增加你只需要擴展你的服務器(而不是讓可怕的複雜的客戶端試圖連接點對點)

+0

感謝您的回覆。我在看「UDP孔衝孔」,這似乎很簡單,可以實施。唯一的問題是我需要保持一定的完整性來發送/接收數據,因爲我正在開發的軟件是一個shell,命令必須以正確的順序發送,並且下載/上傳文件必須準確無誤。 –

+0

因此,對於使用「TCP孔打孔」的情況,這會更有趣。假設我使用這種方法,我需要一個服務器S和兩個客戶:C1,C2。 C1和C2連接到S上.S標識客戶端的地址,然後發送每個客戶端的信息,然後客戶端相互知道。 我不明白這整個過程如下:如何在客戶端與其他連接,如果客戶端已連接到服務器,他們的門都鎖上了? –

1

在客戶端與中央服務器的幫助之間建立直接連接是可能的,但不是微不足道的。這稱爲Nat Traversal,並通過使用「僞造」UDP數據包在防火牆中打孔來工作。這項技術是Skype開創的(或至少是最前沿的)技術。
請參閱Wiki文章以獲取鏈接以及其工作原理的總體概述。

+0

感謝您的回覆。我在看「UDP孔衝孔」,這似乎很簡單,可以實施。唯一的問題是我需要保持一定的完整性來發送/接收數據,因爲我正在開發的軟件是一個shell,命令必須以正確的順序發送,並且下載/上傳文件必須準確無誤。 –

+0

因此,對於使用「TCP孔衝孔」的案例來說,這會更有趣。假設我使用這種方法,我需要一個服務器S和兩個客戶:C1,C2。 C1和C2連接到S上.S標識客戶端的地址,然後發送每個客戶端的信息,然後客戶端相互知道。 我不明白這整個過程如下:如何在客戶端與其他連接,如果客戶端已連接到服務器,他們的門都鎖上了? –

相關問題