我正在开发SNTP客户端,它通过UDP从NTP服务器获取时间戳。一切正常,我可以下载时间戳和更新Windows时钟,但如果UDP数据包丢失,我想收到一条消息。如何检测数据包何时丢失?我需要这些信息,因为如果数据丢失,我想获得新的时间戳。
......我该如何测试该功能?如何故意丢失UDP数据包?
答案 0 :(得分:8)
使用UDP是不可能的。如果需要可靠的连接,则应使用TCP。
答案 1 :(得分:8)
您有三种选择:
你要问的是如何做#3,答案是:
等一下......那就是TCP的确如此(*)!你应该只使用TCP!
(*)这是一个简化,TCP做了很多工作来使这个过程可靠。
答案 2 :(得分:1)
UDP是一种无连接协议。当没有连接时,你无法“检测”任何东西。您必须使用面向连接的协议(如TCP)才能解决此问题。
答案 3 :(得分:0)
确定。我知道了。但是我可以通过做这样的事情来检查丢包吗?例如,如果我将计时器设置为2秒,然后运行此功能,我可以看到服务器是否正确响应。然后我应该知道是否有丢包?
public bool IsResponseValid()
{
if(SNTPData.Length < SNTPDataLength || Mode != _Mode.Server)
{
return false;
}
else
{
return true;
}
}
答案 4 :(得分:0)
因为没有办法测试UDP是否未能到达,唯一真正的选择是为所有发送的数据添加“数据包号”前缀,因此如果它不是下一个数字,你知道丢失了一个数据包..
据我所知,除了拉扯电缆并更换它之外,没有办法故意丢失1 udp数据包..并希望...