2010-06-27 66 views
1

我的程序是一個網吧程序,服務器將控制客戶端(開 - 關帳戶,發送文件,截屏,關閉正在運行的應用程序等),客戶將能夠:訂購飲料,發送信息等。用於客戶機/服務器網吧軟件的TCP或UDP?

所以,爲了獲得最佳性能,我應該使用TCP還是UDP?在此先感謝

回答

7

爲了大幅降低編碼工作量,痛苦,調試,用戶投訴等問題,請使用TCP。

3

我寧願選擇可靠性而使用TCP。此外,爲了傳輸文件(您提到的截圖),UDP不太合適,因爲數據包可能無序地到達您,您將不得不重新排序它們。>您需要在UDP之上編寫一些數據包編號等(TL; DR使用TCP)。

0

由於UDP無需連接(您可以在傳輸過程中節省TCP的昂貴的connect調用和TCP標誌管理),UDP將確保爲您提供最佳性能。但是,由於傳輸無法得到保證,因此請在通信中制定一些安全承認。然而,在本地網絡中,除了您的客戶拉或扭轉電纜之外,它應該很少成爲問題:-)。如果您的協議變得更加複雜,並且希望不僅僅是命令/響應對,還需要考慮採用TCP。

2

鑑於您可能只有幾十臺客戶端計算機連接到服務器,並且它們都將在局域網上運行,因此性能是而不是您最關心的

鑑於此,TCP絕對是最佳選擇。您不希望使用無序數據包,丟失的數據包和可能在UDP中發生的重複數據包(儘管通過局域網,很多這些問題被最小化 - 儘管未被消除)。

0

恕我直言TCP和UDP之間的主要區別在於,TCP確保軟件包到達目的地而UDP不是。因爲UDP比TCP快一點。

正如我瞭解你的程序,我會使用TCP,因爲你的任務,似乎他們必須工作,網絡連接必須是可靠的。 我只會將UDP用於任務,其中某些包可能會丟失,例如從傳感器播放溫度。

0

UDP中的U通常被認爲代表不可靠(*)。如果你使用UDP,那麼任何時候(並且會有一些!)你需要服務器網絡中的可靠性,你將需要編程你自己的更高層協議來檢測丟包,執行重試等等。這並不簡單,在「用戶空間」應用程序中執行起來特別困難。 TCP處理數據包丟失檢測,無序數據包檢測,重試等等,而無需在應用程序級別擔心。

另一個問題是,很多防火牆,路由器,網關等將默認阻止所有UDP通信。

海事組織,你應該只考慮在情況使用UDP:

數據
  • 損失是可以接受的,而且
  • 最佳的網絡性能是絕對的,壓倒一切的要求。

[* - 實際上,UDP代表用戶數據報協議。]

1

我無法想出任何理由,爲什麼你應該選擇UDP在這種情況下。