欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Qt怎么實(shí)現(xiàn)NTP服務(wù)器時(shí)間同步

本篇內(nèi)容主要講解“Qt怎么實(shí)現(xiàn)NTP服務(wù)器時(shí)間同步”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Qt怎么實(shí)現(xiàn)NTP服務(wù)器時(shí)間同步”吧!

成都創(chuàng)新互聯(lián)長(zhǎng)期為近1000家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為長(zhǎng)泰企業(yè)提供專業(yè)的做網(wǎng)站、網(wǎng)站建設(shè),長(zhǎng)泰網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

一、前言

很多軟件都有時(shí)間同步的功能,尤其是Qt在嵌入式設(shè)備上的,有時(shí)候還有很多是沒有UI界面的程序,而硬件上有個(gè)時(shí)鐘,時(shí)間久了難免沒有電,需要從服務(wù)器來同步時(shí)間來保證本地的時(shí)間是正確的,不然本地記錄的一些日志的時(shí)間都是不正確的,很多還可能是1970年的。 NTP同步時(shí)間是個(gè)標(biāo)準(zhǔn)的協(xié)議,使用的端口是123端口,這個(gè)端口很牛逼,居然霸占了123這個(gè)端口,碉堡!使用NTP服務(wù)同步時(shí)間,需要設(shè)置個(gè)時(shí)間服務(wù)器IP地址,這個(gè)地址可以網(wǎng)上找到很多的,微軟自帶的那個(gè)有時(shí)候行有時(shí)候不行,因?yàn)槟J(rèn)用的UDP協(xié)議,所以是不可靠的,有丟包的可能,建議選擇一些國(guó)內(nèi)的時(shí)間服務(wù)器,比如一些大學(xué)的時(shí)間服務(wù)器,還是比較準(zhǔn)確可靠的。

二、代碼思路

NtpClient::NtpClient(QObject *parent) : QObject(parent)
{
    ntpIP = "202.120.2.101";

    udpSocket = new QUdpSocket(this);
    connect(udpSocket, SIGNAL(connected()), this, SLOT(sendData()));
    connect(udpSocket, SIGNAL(readyRead()), this, SLOT(readData()));
}

void NtpClient::sendData()
{
    qint8 LI = 0;
    qint8 VN = 3;
    qint8 MODE = 3;
    qint8 STRATUM = 0;
    qint8 POLL = 4;
    qint8 PREC = -6;
    QDateTime epoch(QDate(1900, 1, 1));
    qint32 second = quint32(epoch.secsTo(QDateTime::currentDateTime()));

    qint32 temp = 0;
    QByteArray timeRequest(48, 0);
    timeRequest[0] = (LI << 6) | (VN << 3) | (MODE);
    timeRequest[1] = STRATUM;
    timeRequest[2] = POLL;
    timeRequest[3] = PREC & 0xff;
    timeRequest[5] = 1;
    timeRequest[9] = 1;
    timeRequest[40] = (temp = (second & 0xff000000) >> 24);
    temp = 0;
    timeRequest[41] = (temp = (second & 0x00ff0000) >> 16);
    temp = 0;
    timeRequest[42] = (temp = (second & 0x0000ff00) >> 8);
    temp = 0;
    timeRequest[43] = ((second & 0x000000ff));

    udpSocket->write(timeRequest);
}

void NtpClient::readData()
{
    QByteArray newTime;
    QDateTime epoch(QDate(1900, 1, 1));
    QDateTime unixStart(QDate(1970, 1, 1));

    while (udpSocket->hasPendingDatagrams()) {
        newTime.resize(udpSocket->pendingDatagramSize());
        udpSocket->read(newTime.data(), newTime.size());
    };

    QByteArray transmitTimeStamp ;
    transmitTimeStamp = newTime.right(8);
    quint32 seconds = transmitTimeStamp.at(0);
    quint8 temp = 0;

    for (int i = 1; i <= 3; i++) {
        seconds = (seconds << 8);
        temp = transmitTimeStamp.at(i);
        seconds = seconds + temp;
    }

    QDateTime dateTime;
    dateTime.setTime_t(seconds - epoch.secsTo(unixStart));

#ifdef __arm__
#ifdef arma9
    dateTime = dateTime.addSecs(60 * 60 * 8);
#endif
#endif
    udpSocket->disconnectFromHost();

    //有些時(shí)候返回的數(shù)據(jù)可能有誤或者解析不正確,導(dǎo)致填充的時(shí)間不正確
    if (dateTime.isValid()) {
        emit receiveTime(dateTime);
    }
}

void NtpClient::setNtpIP(const QString &ntpIP)
{
    if (this->ntpIP != ntpIP) {
        this->ntpIP = ntpIP;
    }
}

void NtpClient::getDateTime()
{
    udpSocket->abort();
    udpSocket->connectToHost(ntpIP, 123);
}

三、效果圖

Qt怎么實(shí)現(xiàn)NTP服務(wù)器時(shí)間同步

到此,相信大家對(duì)“Qt怎么實(shí)現(xiàn)NTP服務(wù)器時(shí)間同步”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

當(dāng)前標(biāo)題:Qt怎么實(shí)現(xiàn)NTP服務(wù)器時(shí)間同步
網(wǎng)站鏈接:http://www.chinadenli.net/article48/ishoep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)用戶體驗(yàn)定制網(wǎng)站自適應(yīng)網(wǎng)站標(biāo)簽優(yōu)化網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作