NTP-клиент библиотеки poco не работает должным образом - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь реализовать NTP-клиент для вычисления смещения и задержки на плате cubietruck (ARM® Cortex ™ -A7 Dual-Core) с armbian (Debian 9.6 stretch) os.Я использовал библиотеку Poco (версия 1.7.8p2) и код, похожий на пример, который предоставляет poco.Ниже приведен файл main.cpp:

#include <sstream>
#include <iostream>
#include  "NTPClientTest.h"

using namespace std;
using namespace NTP;


void NtpServerSynchronization::ntpTimeSync()
{


    _ntpClient.request("pool.ntp.org");

}


void NtpServerSynchronization::onResponse(const void* pSender, NTPEventArgs& args)
{


    auto t1 = args.packet().originateTime().epochMicroseconds();
    auto t2 = args.packet().receiveTime().epochMicroseconds();
    auto t3 = args.packet().transmitTime().epochMicroseconds();
}



int main()
{
    try {


        NtpServerSynchronization ntp;
        ntp.ntpTimeSync();  

    }
    catch (std::exception& e) {
        std::cerr << e.what() << '\n';
    }
}

Хотя заголовок NTPClientTest состоит из следующего:

#include <Poco/Net/NTPClient.h>
#include <Poco/Net/NTPEventArgs.h>
#include <Poco/Delegate.h>


using namespace Poco;
using namespace Poco::Net;
using namespace std;


namespace NTP {

    class NtpServerSynchronization
        /// Class for time synchronization with ntp server
    {
    public:


        NtpServerSynchronization() :
            _ntpClient(IPAddress::IPv4)
        {
            _ntpClient.response += Delegate<NtpServerSynchronization, NTPEventArgs>(this, &NtpServerSynchronization::onResponse);
        }

        ~NtpServerSynchronization()
        {
            _ntpClient.response -= Delegate<NtpServerSynchronization, NTPEventArgs>(this, &NtpServerSynchronization::onResponse);
        }

        void ntpTimeSync();


        void onResponse(const void* pSender, NTPEventArgs& args);



    private:

        NTPClient _ntpClient;
        SocketAddress _sa;
    };
}

Однако я получаю следующие значения:

t1 = 2085978496000000
t2 = 1549296374000000
t3 = 1549296374000000

Как видно, t1 не соответствует действительной метке времени эпохи, а t2 == t3 означает, что receiveTime и TransmitTime одинаковы, и я получил аналогичный результат, какой бы сервер ntp я ни использовал.Что я делаю неправильно в отношении t1 и является ли равенство t2, t3 логическим?

...