繁体   English   中英

我想知道如何使用C#中的序列化检查tcp客户端服务器的经过时间

[英]I would like to know how to check the elapsed time with tcp client server using serialization in C#

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

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

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;

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

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

或者,您可以尝试在应用程序级别实现时间同步,以便客户端可以确定与服务器时间的偏移量。 看一下NTP协议的灵感。

同样,所有这些与DateTime.Now一起摆弄的东西也不能提高精度,可以仅用DateTime.Now.Ticks代替。 请记住,DateTime.Now现在具有10毫秒的分辨率,比本地网络上的客户端服务器往返更大。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM