VC++ 从时间服务器读取时间

 
/************************************************************************/
/* 从时间服务器读取时间                                                                     */
/************************************************************************/
DWORD GetTimeFromServer(in_addr ipaddr)
{
 DWORD dwRet = -1;
 SOCKET sSock = socket(AF_INET, SOCK_STREAM, 0);
 struct sockaddr_in sin;
 
 if (sSock != INVALID_SOCKET)
 { 
      memcpy(&sin.sin_addr, &ipaddr, sizeof(in_addr));
      sin.sin_family = AF_INET;
      sin.sin_port   = htons(IPPORT_TIMESERVER);  
   
      //连接服务端
      connect(sSock, (struct sockaddr *)&sin, sizeof(struct sockaddr_in)); 
     for (iRead = 0; iRead < 4; iRead += iResult)
      {
      /*读取时间信息*/
           iResult = recv(sSock, (char*)&dwRet + iRead, 4 - iRead, 0);
           if (iResult < 1)
           {
                break;
           }
      }

      if (iRead == 4)
     {
           dwRet = ntohl(dwRet); 
     }
    else
    {
         ::MessageBox(NULL, "Getting time failed!", "Error", MB_OK | MB_ICONERROR);
    }
 
     closesocket(sSock);
 }  

      return dwRet;
}
 
-----------------------------------------------------------------------------------------
 
WSADATA WSAData;
 /*初始化套接字库*/
 if (WSAStartup(MAKEWORD(2, 2), &WSAData) != 0)
 {
  MessageBox("WSAStartup failed.\n");
  WSACleanup();
  return ;
 }    

 in_addr timeServer = {128,138,140,44};          // 时间服务器IP地址
 /*取服务器时间*/
 DWORD dwTime = GetTimeFromServer(timeServer);
 
 if (dwTime != -1)     // 读取时间失败
 {   
      UINT64 uiCurTime, uiBaseTime, uiResult;
     SYSTEMTIME st;
 
     uiBaseTime = ((UINT64) HIGHTIME << 32) + LOWTIME; 
     uiCurTime = (UINT64)dwTime * (UINT64)10000000;
     uiResult = uiBaseTime + uiCurTime;
 
     FileTimeToSystemTime((LPFILETIME)&uiResult, &st);
     CString str = "";
     str.Format("%d-%d-%d", st.wYear, st.wMonth, st.wDay);   // 日期
     AfxMessageBox(str); 
 }
 else
 {
  MessageBox("获取时间失败");
 }

 WSACleanup();


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值