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

标签 c# sockets udp timestamp udpclient

在 C# (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 捕获数据包)。

关于c# - UDP接收-包到达的精确时间C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30156658/

相关文章:

c# - 在 C# 中使用 Revit API 提示用户回答 bool 选择

c# - 哪个更快地读取 XML 文件或查询数据库

java - Full GC 后 socket 连接变慢的原因是什么?

c - 在C中,如何定期向多个对等点(可能是数千个)发送UDP数据报?

c++ - select和UDP协议(protocol)结合时收不到数据

networking - 确定网络中的不对称延迟

c# - WPF - 没有焦点的滚动

c# - 如何在 sql server 中存储 Microsoft Word 文档的格式化片段

Java DatagramSocket、Dart ClientSocket

java - java从socket读取数据