0

我需要知道如何正确检查两个客户端和 1 个服务器之间发送消息的经过时间。

我试图放入我的对象,我用下一个函数以毫秒为单位传输确切的时间:

class exactTime {
  public static double ConvertSecondsToMilliseconds() {
    return TimeSpan.FromSeconds(DateTime.Now.Second).TotalMilliseconds;
  }
  public static double ConvertMinutesToMilliseconds() {
    return TimeSpan.FromMinutes(DateTime.Now.Minute).TotalMilliseconds;
  }
  public static double ConvertHoursToMilliseconds() {
    return TimeSpan.FromHours(DateTime.Now.Hour).TotalMilliseconds;
  }
  public static double ExactTime() {
    double exacatTime = DateTime.Now.Millisecond + ConvertHoursToMilliseconds() + 
       ConvertMinutesToMilliseconds() + ConvertSecondsToMilliseconds();
    return exacatTime;
  }
}

与收到消息时相比,我使用相同的函数,而不是减去我得到的对象所得到的时间,但输出并不好,它总是在增长,而且没有任何效果。像那样:

double remainderTime = exactTime.ExactTime() - tcpObject.exactTime;
4

1 回答 1

1

这不容易做到,因为服务器和客户端可能有不同的时间。发生这种情况是因为计算机的内部时钟漂移,并且每台计算机漂移不同。一个多月的时间可以累积几秒钟的差异。

如果您控制服务器和客户端,那么您可以使用可靠的来源设置基于 NTP 的时间同步,但这更多的是管理任务,然后是编程任务。

作为替代方案,您可以尝试在应用程序级别实现时间同步,以便客户端可以确定与服务器时间的偏移量。查看 NTP 协议以获取灵感。

此外,所有这些对 DateTime.Now 的摆弄都不会提高精度,并且可以仅用 DateTime.Now.Ticks 替换。请记住,DateTime.Now 具有 10 毫秒的分辨率,这比本地网络上的客户端服务器往返更大。

于 2013-04-13T20:58:41.747 回答