C#Socket,发送过程中经过的时间

时间:2009-12-16 08:46:48

标签: c# synchronization sockets

我想知道是否有办法知道网络上数据传输的时间。

例如,我从计算机A向计算机B和C发送数据包(因此根据距离等,每个经过的时间可能不同),我想知道每个客户端的发送和接收之间的时间(准确地同步数据)。

此外,重要的是要知道我的客户端必须以异步模式工作(这不是问题)。

有人知道怎么做吗?

风筝。

2 个答案:

答案 0 :(得分:2)

Corvil是一个众所周知的软件,专门针对延迟分析 对于您的分析,涉及软件和硬件方面有几个不同的层,因此实施起来非常复杂 在同步方面,拥有像序列号这样值得信赖的密钥更为重要 - 当你使用TCP时,如果丢失一个包有问题就会遇到大问题,因为这会导致多个包的重新排队。

答案 1 :(得分:0)

除非你的所有节点都有同步时钟,否则这几乎是不可能的。如果你确实有一个准确的同步机制并且可以相信时钟是相同的那么你可以在从A发送它时在数据包中插入一个时间戳,然后在C中将时间戳与当前时间进行比较。

但同样,你需要高时间同步才能使这种方法有效。

如果您只想进行基准测试并了解平均时间,那么您可以做的就是让数据包反弹。基本上,告诉C将相同的数据包发送回B然后发送到A,然后在A中将原始时间戳与当前时间(将使用相同的时钟)进行比较。这将为您提供往返延迟,您可以将其除以2以获得单向延迟时间。

如果您担心通过发送消息而增加的开销,那么您可以执行以下一项(或两项)

  1. 发回更小的数据包。基本上是对应于接收消息的序列号的整数
  2. 每隔N个消息只发送一次ACK。应提供足够的数据来了解“典型”延迟时间