UDP接收-包到达的精确时间C#

UDP receiving - precise time when packages arrive in C#

有没有办法在 C# 中使用 UDP 协议知道包到达缓冲区的准确时间 (windows 7)?

我试过这样的东西:

while(true) {
    UDPclient.Receive(ref remoteEp);
    Console.WriteLine(System.DateTime.Now.TimeOfDay.ToString()); }

我得到了错误的结果。有些包裹到达的距离很近,有些则相距太远。 Wireshark 给出了正确的时间戳,两个包之间的时间在我的应用程序中是相同的。 我也尝试了异步的 BeginReceive 操作,但我也得到了包之间的错误时间。 我尝试提高接收到的线程优先级,但也没有解决我的问题。

我处理包的速度非常快,所以 while 循环不会太慢(我检查过)。

有什么方法可以知道包何时到达缓冲区而不是何时从缓冲区收到?

DateTime.Now 在大多数机器上的精度为 15 毫秒。您可以使用 Stopwatch.

非常精确地测量相对时间(时间跨度)

我怀疑 NIC 驱动程序或您下方堆栈中的任何其他内容是否正在记录数据包的精确时间戳。所以我认为这是你能得到的最好的(除了像 Wireshark 那样使用 WinPcap 捕获数据包)。