Qt怎么实现NTP服务器时间同步
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容主要讲解"Qt怎么实现NTP服务器时间同步",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Qt怎么实现NTP服务器时间同步"吧!一、前言很多软件都有
千家信息网最后更新 2026年11月03日Qt怎么实现NTP服务器时间同步
本篇内容主要讲解"Qt怎么实现NTP服务器时间同步",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Qt怎么实现NTP服务器时间同步"吧!
一、前言
很多软件都有时间同步的功能,尤其是Qt在嵌入式设备上的,有时候还有很多是没有UI界面的程序,而硬件上有个时钟,时间久了难免没有电,需要从服务器来同步时间来保证本地的时间是正确的,不然本地记录的一些日志的时间都是不正确的,很多还可能是1970年的。 NTP同步时间是个标准的协议,使用的端口是123端口,这个端口很牛逼,居然霸占了123这个端口,碉堡!使用NTP服务同步时间,需要设置个时间服务器IP地址,这个地址可以网上找到很多的,微软自带的那个有时候行有时候不行,因为默认用的UDP协议,所以是不可靠的,有丢包的可能,建议选择一些国内的时间服务器,比如一些大学的时间服务器,还是比较准确可靠的。
二、代码思路
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(); //有些时候返回的数据可能有误或者解析不正确,导致填充的时间不正确 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怎么实现NTP服务器时间同步"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
时间
服务
服务器
同步
端口
有时候
内容
地址
学习
不行
实用
更深
代码
兴趣
前言
功能
大学
实用性
实际
嵌入式
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网和科技技术
疫情对互联网科技公司影响
互联网为科技
美国互联网科技巨头监管
互联网与科技金融数据
互联网科技的发展
金融科技与互联网金融
善班互联网科技
互联网科技视频
西安互联网科技公司
深圳期待互联网科技
佰商互联网科技有限公司
随着互联网科技发展
顶级互联网科技成果有哪些
注册互联网科技公司经营范围大全
群盈汇互联网科技有限公司
科技互联网的核心竞争力
互联网领先科技宣传片
浙南科技城互联网大厦招聘
互联网科技快讯热点
金融科技还是互联网
广州互联网科技公司
互联网科技视频
九亚互联网科技
百单互联网科技有限公司
济南和联互联网科技有限公司
互联网媒体平台算高科技产业
2021互联网科技公司排名
半导体是互联网高科技吗
北京互联网科技类企业分布