簡體   English   中英

.NET TCP協議的可靠性如何?

[英]How reliable is .NET TCP protocol?

我對C#很新,所以請耐心等待。 我在C#.NET 4.0中編寫了一個相對簡單的客戶端服務器應用程序。 我使用TCP協議,TCPListener和TCPClient更具體。 我知道TCP協議在理論上是如何工作的。 但我必須100%確定在數據傳輸過程中不會出現(未處理的)錯誤。

發送數據后,如何知道數據是否已成功接收。 我可以完全依賴TCP協議的底層實現嗎? 所以我沒有必要從另一方確認收到了數據?

至關重要的是,我確實知道哪些數據已發送並已成功接收。 我知道這是一個愚蠢的問題,但我真的很想確定。 謝謝你的時間和答案。

TCP保證:

  • 您發送的數據將按照您發送的順序到達
  • 您發送的數據將與您發送的數據完全一致(未經修改)
  • 不會收到其他(虛假)數據

它不能保證嚙齒動物不會吃掉你的電纜,建築物的電源會繼續存在,甚至當你操作系統告訴它有一些數據時,你正在談論的另一台機器上的過程也會費心去做。到達。

如果您需要確認接收到數據並采取相應措施,則需要手動發送確認(因為TCP連接是雙工的,您已經有了通道來執行此操作)。

當然,所有這些都不是特定於.NET,Windows或任何其他網絡堆棧實現的。

更新:我想特別指出,在OS網絡堆棧接受數據傳輸之后,您無法知道另一端的進程是否已收到該數據。 網絡堆棧在大多數情況下知道數據已經到達目標(通過TCP ACK消息), 但是它不知道目標上的OS是否已經將它們饋送到它們預定的進程 因此,發回您自己的“收到並執行的數據”消息是唯一的選擇。

僅使用TCP / IP,您無法確定是否收到任何數據 - 您必須在頂部層疊另一個協議。

如果您可以確定是否收到某些特定數據,那么TCP / IP會在收到之前保證所有數據。

沒有“.NET TCP協議”這樣的東西。 只有TCP協議,已經在互聯網上運行了大約30年。 這很可靠。 這是一個設計目標。

一種選擇是使用TCP上的WCF可靠會話 WCF可靠會話將掩蓋傳輸故障。

如果您確實需要可靠性網絡傳輸,為什么不使用消息隊列 他們有交易保證(與使用它的開發人員的紀律一樣強,但不強於此!)

這就像你的所有流量都具有數據庫服務器類型的安全性(和同上性能)。 我認為您可以輕松配置.NET Remoting以使用MSMQ頻道

我個人從來沒有這樣做,但我已經使用消息隊列一般。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM