簡體   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