程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 網絡程序設計--網絡對時

網絡程序設計--網絡對時

編輯:C++入門知識

    [cpp]  //////////////////////////////////////////////////////////   // NetTime.cpp文件         #include "../common/InitSock.h"   #include <stdio.h>   CInitSock initSock;       void SetTimeFromTP(ULONG ulTime)    // 根據時間協議返回的時間設置系統時間   {       // Windows文件時間是一個64位的值,它是從1601年1月1日中午12:00到現在的時間間隔,       // 單位是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使用的基准時間加上以及逝去的時間,即ulTime       LONGLONG *pLLong = (LONGLONG *)&ft;       // 注意,文件時間單位是1/1000 0000秒,即1000萬分之1秒(100-nanosecond )       *pLLong += (LONGLONG)10000000 * ulTime;           // 再將時間轉化回來,更新系統時間       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.htm       servAddr.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;       }              // 等待接收時間協議返回的時間。學習了Winsock I/O模型之後,最好使用異步I/O,以便設置超時       ULONG ulTime = 0;  www.2cto.com     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;   }      

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved