日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

VC++实现获取网络时间

發(fā)布時間:2025/3/20 c/c++ 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VC++实现获取网络时间 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

大家都知道Windows自帶同步網(wǎng)絡時間,我們來實現(xiàn)之

代碼如下

#include <winsock2.h> #pragma comment(lib, "WS2_32") // 鏈接到WS2_32.libclass CInitSock { public:CInitSock(BYTE minorVer = 2, BYTE majorVer = 2){// 初始化WS2_32.dllWSADATA wsaData;WORD sockVersion = MAKEWORD(minorVer, majorVer);if(::WSAStartup(sockVersion, &wsaData) != 0){exit(0);}}~CInitSock(){ ::WSACleanup(); } };#include "InitSock.h" #include <stdio.h> CInitSock initSock; void SetTimeFromTP(ULONG ulTime) // 根據(jù)時間協(xié)議返回的時間設置系統(tǒng)時間 {// Windows文件時間是一個64位的值,它是從1601年1月1日中午12:00到現(xiàn)在的時間間隔,// 單位是1/1000 0000秒,即1000萬分之1秒(100-nanosecond )FILETIME ft;SYSTEMTIME st;// 首先將基準時間(1900年1月1日0點0分0秒0毫秒)轉化為Windows文件時間 st.wYear = 1900;st.wMonth = 1;st.wDay = 1;st.wHour = 0;st.wMinute = 0;st.wSecond = 0;st.wMilliseconds = 0;SystemTimeToFileTime(&st, &ft);// 然后將Time Protocol使用的基準時間加上以及逝去的時間,即ulTimeLONGLONG *pLLong = (LONGLONG *)&ft;// 注意,文件時間單位是1/1000 0000秒,即1000萬分之1秒(100-nanosecond )*pLLong += (LONGLONG)10000000 * ulTime; // 再將時間轉化回來,更新系統(tǒng)時間FileTimeToSystemTime(&ft, &st); SetSystemTime(&st); }int main() {SOCKET s = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if(s == INVALID_SOCKET){printf(" Failed socket() \n");return 0;}// 填寫遠程地址信息,連接到時間服務器sockaddr_in servAddr; servAddr.sin_family = AF_INET;servAddr.sin_port = htons(37); // 這里使用的時間服務器是129.132.2.21,更多地址請參考http://tf.nist.gov/service/its.htmservAddr.sin_addr.S_un.S_addr = inet_addr("129.132.2.21");if(::connect(s, (sockaddr*)&servAddr, sizeof(servAddr)) == -1){printf(" Failed connect() \n");return 0;}// 等待接收時間協(xié)議返回的時間。學習了Winsock I/O模型之后,最好使用異步I/O,以便設置超時ULONG ulTime = 0;int nRecv = ::recv(s, (char*)&ulTime, sizeof(ulTime), 0);if(nRecv > 0){ulTime = ntohl(ulTime);SetTimeFromTP(ulTime);printf(" 成功與時間服務器的時間同步!\n");}else{printf(" 時間服務器不能確定當前時間!\n");}::closesocket(s);return 0; }


?

轉載于:https://www.cnblogs.com/new0801/archive/2012/09/04/6177716.html

總結

以上是生活随笔為你收集整理的VC++实现获取网络时间的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。