Синхронизация / обновление часов компьютера с сервером времени с использованием NTPClient - PullRequest
0 голосов
/ 08 марта 2019

Я пытаюсь синхронизировать часы компьютера, используя сервер. Я погуглил и обнаружил, что «NTPClient» может быть использован для этого.

Моя цель - синхронизировать время компьютера с сервером времени ниже:
time.nist.gov

Ниже приведены ссылки, откуда у меня есть библиотека и код для использования, как видно из моего кода:

Источник для получения файла NTPClient.cs
https://www.codeproject.com/Articles/1005/SNTP-Client-in-C

Источник кода ниже
https://www.codeguru.com/csharp/csharp/cs_date_time/timeroutines/article.php/c4207/C-SNTP-Client.htm

Когда я запускаю код, я получаю изображение, как показано ниже, где оно получает правильное время: enter image description here

Я думаю, но не уверен, что важная строка:
client.Connect (истина);

поскольку intellisense говорит, что "true" означает "UpdateSystemTime", но этого не происходит, поэтому, я полагаю, я не уверен, как это сделать?

void synccomputerTime()
{
    //https://www.codeproject.com/Articles/1005/SNTP-Client-in-C (Source to get NTPClient.cs file)
    //https://www.codeguru.com/csharp/csharp/cs_date_time/timeroutines/article.php/c4207/C-SNTP-Client.htm (Source of below code)
    NTPClient client;
    try
    {
        client = new NTPClient("time.nist.gov");
        client.Connect(true); //true should UpdateSystemTime but doesn't do that?
    }
    catch (Exception e)
    {
        MessageBox.Show("ERROR: {0}", e.Message);
        return;
    }
    MessageBox.Show(client.ToString());
}

............................................... .......

Я также пытался использовать этот класс без удачи:
SNTPClient.cs https://github.com/ramonsmits/InternetTime/blob/master/SNTPClient.cs

Здесь я также установил для этой строки значение true, поскольку оно должно обновлять часы компьютера, но не делает этого:
sntp.Connect (истина); // true для обновления часов локального клиента

void synccomputerTime2()
{
    //https://github.com/ramonsmits/InternetTime/blob/master/SNTPClient.cs
    InternetTime.SNTPClient sntp = new InternetTime.SNTPClient("ntp1.ja.net");
    sntp.Connect(true); // true to update local client clock
    DateTime dt = sntp.DestinationTimestamp.AddMilliseconds(sntp.LocalClockOffset);
    string timeStampNow = dt.ToString("dd/MM/yyyy HH:mm:ss.fff");
    MessageBox.Show(timeStampNow);
}

1 Ответ

0 голосов
/ 08 марта 2019

Windows уже имеет встроенный NTP-клиент (W32Time). Просто сделайте это из командной строки администратора и:

net time /setsntp:time.nist.gov

Если вы находитесь в деловой сети, подключенной к домену Active Directory, ваш компьютер по умолчанию уже синхронизирует время с контроллером домена, и вы не хотите его менять.

...