簡體   English   中英

c#udp檢查消息是否到達

[英]c# udp check if message reached

您如何檢查消息是否已到達目的地,我想出了我的解決方案,但由於我不是這種主題的專家,所以我想了解其他方法。 我的解決方案是(客戶端)發送數據包,如果在超時時間內未收到確認,則再次發送;(服務器端)如果收到的消息正確,則發送確認;如果在另一端沒有收到,則再次發送。 這是該算法圖的圖片Picture 簡而言之,雙方發送了兩次消息。 還有其他想法嗎?

這取決於您的應用程序。 但是,從附帶的圖表來看,您更喜歡TCP通信。

但是,如果您真的想使用UDP而不是TCP,則必須放開ACK。

假設您不斷將圖像流傳輸到遠程目標。 只要流式傳輸速度盡可能快,您就不必擔心幀丟失。 您可以使用UDP。 還要考慮傳輸線(物理層)預測結果的可靠性。

但是,如果您的應用程序不是那么緊要,而是需要盡可能高的可靠性,則可以使用TCP。

有關更多細節,請訪問此

以下是與UDP和TCP的一些比較

UDP協議是一種非常簡單的協議,它允許通過IP發送數據報。 對於時間緊迫的數據,UDP比TCP更可取,因為TCP的許多可靠性特征往往以更高的等待時間和因丟包情況下無條件重新發送數據而引起的延遲為代價。

與TCP(向程序員為每個連接的對等方提供一個有序的八位字節流)的TCP相比,UDP提供了基於分組的接口,而沒有連接對等體的概念。 數據報到達時包含一個源地址1,並且程序員應手動跟蹤概念上的對等“連接”。

TCP保證2既可以將給定的八位位組傳遞給所連接的對等端,也可以斷開連接並通知程序員。 UDP不保證將傳遞任何給定的數據包,如果丟失數據包,則不提供任何通知。

TCP保證將按發送順序接收每個發送的八位位組。 UDP不保證傳輸的數據包將以任何特定的順序被接收,盡管諸如IP之類的基礎協議暗示着數據包通常將在沒有路由和/或硬件錯誤的情況下以傳輸的順序被接收。

TCP對傳輸數據的大小沒有限制。 UDP直接使程序員面臨幾個特定於實現的(但也是標准化的)數據包大小限制。 創建大小超過這些限制的數據包會增加將數據包分段或簡單丟棄的機會。 分段是不可取的,因為如果丟失了數據報的任何單個分段,則整個數據報將被自動丟棄。 由於各種重疊的標准,為數據報制定安全的最大大小並非易事。

暫無
暫無

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

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