Я хотел бы знать, как проверить истекшее время с клиентским сервером TCP, используя сериализацию в C#

Мне нужно знать, как правильно проверить истекшее время отправки сообщений между двумя клиентами и 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;

1 ответ

Это не может быть легко сделано, потому что сервер и клиент, вероятно, будут иметь разное время. Это происходит потому, что внутренние часы компьютеров дрейфуют, и каждый из них дрейфует по-разному. За месяц может накапливаться разница в несколько секунд.

Если вы управляете сервером и клиентами, то вы можете настроить синхронизацию времени на основе NTP с надежным источником, но это скорее административная, чем программируемая задача.

В качестве альтернативы вы можете попытаться реализовать синхронизацию времени на уровне своего приложения, чтобы клиент мог определить смещение от времени сервера. Взгляните на протокол NTP для вдохновения.

Кроме того, все эти действия с DateTime.Now не улучшают точность и могут быть заменены только DateTime.Now.Ticks. Имейте в виду, что DateTime.Now имеет разрешение 10 миллисекунд, что больше, чем двусторонняя передача клиент-сервер в локальной сети.

Другие вопросы по тегам