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# - 获取连接的 TcpClient 的远程端口

java - 为什么 Netty 4 没有 Datagram ServerChannel

ruby - 针对外部 UDP API 进行测试。从哪儿开始?

sockets - 我可以选择使用哪个以太网端口进行 UDP 通信吗?

c# + WebForms + 静态——最佳实践是什么?

c# - Xamarin - 在社区版中编译 AOT?

C Socket 程序未打印所需的输出(无错误)

c - 写入数据后向套接字发送错误响应

c# - 如何知道 Entity Framework 中数据库的物理大小?

c# - 使用 WriteRange 和 MD5 上传 Azure 文件存储已被淘汰