Qt怎么实现NTP服务器时间同步
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,本篇内容主要讲解"Qt怎么实现NTP服务器时间同步",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Qt怎么实现NTP服务器时间同步"吧!一、前言很多软件都有
千家信息网最后更新 2025年12月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安全错误
数据库的锁怎样保障安全
无锡安卓软件开发工程师
保理业务系统软件开发
蚌埠电商系统软件开发
如何建设服务器
数据库液冷
网络安全 健康教育设计
短视频服务器哪个配置好
软件开发视屏大讲堂
哪个服务器好用
数据库关系 继承
崩坏三新手去哪个服务器
增加网络安全隐患
华为云服务器批量管理软件
同花顺 代理服务器
2017年度网络安全
大连移动杯网络安全宣传周
左云智能化网络安全创新服务
与4G网络安全架构相比
csgo服务器进不去游戏
北京韩金网络技术有限公司
严重危害网络安全
网络安全部门一般要做什么
上海智行合力网络技术有限公司
服务器装完系统后键盘鼠标不识别
软件开发类型的代表企业
互联网科技英文
群晖服务器出现无法启动
广州网络技术会议
搜狐网络技术有限公司
上海浪潮服务器维修维保哪家好