[英]How to detect that UDP packet has been lost? (C#)
我正在開發SNTP客戶端,該客戶端通過UDP從NTP服務器獲取時間戳。 一切正常,我可以下載時間戳並更新Windows時鍾,但是如果UDP數據包丟失,我想得到一條消息。 如何檢測數據包何時丟失? 我需要這些信息,因為如果數據丟失,我想獲得新的時間戳。
...以及如何測試該功能? 如何故意丟失UDP數據包?
您有三種選擇:
您要問的是如何做#3,答案是:
稍等片刻..這就是TCP的工作方式(*)! 您應該只使用TCP!
(*)這是一種簡化,TCP為使過程可靠而做了很多工作。
UDP是不可能的。 如果需要可靠的連接,則應使用TCP。
UDP是無連接協議。 沒有連接時,您將無法“檢測”任何東西。 您必須使用面向連接的協議(例如TCP)來解決此問題。
好。 我知道了。 但是我可以通過執行以下操作來檢查數據包丟失嗎? 例如,如果我將計時器設置為2秒,然后運行此功能,我可以查看服務器是否正確響應。 那我應該知道是否有丟包嗎?
public bool IsResponseValid()
{
if(SNTPData.Length < SNTPDataLength || Mode != _Mode.Server)
{
return false;
}
else
{
return true;
}
}
因為無法測試UDP是否無法到達,所以唯一的正確選擇是在所有發送的數據前添加“數據包編號”作為前綴,因此,如果它不是行中的下一個編號,則您知道它丟失了一個數據包。
據我所知,除了拉扯電纜並更換電纜以外,沒有辦法故意丟失1個udp數據包。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.