WEB开发网
开发学院软件开发VC 利用RFC868协议编写网络对时程序 阅读

利用RFC868协议编写网络对时程序

 2010-06-27 20:41:52 来源:WEB开发网   
核心提示:MySetTime 函数的功能是将32位值转换为系统时间,并设置系统时间,利用RFC868协议编写网络对时程序(3),void MySetTime(unsigned long ulTime){FILETIME ft;SYSTEMTIME st;st.wYear = 1900;st.wMonth = 1;st.wDay

MySetTime 函数的功能是将32位值转换为系统时间,并设置系统时间。

void MySetTime(unsigned long ulTime)
{
  FILETIME ft;
  SYSTEMTIME st;

  st.wYear = 1900;
  st.wMonth = 1;
  st.wDay = 1;
  st.wHour = 0;
  st.wMinute = 0;
  st.wSecond = 0;
  st.wMilliseconds = 0;

  SystemTimeToFileTime(&st, &ft);
  LARGE_INTEGER li = *(LARGE_INTEGER*)&ft;
  li.QuadPart += (LONGLONG)10000000 * ulTime;
  ft = *(FILETIME*)&li;
  FileTimeToSystemTime(&ft, &st);
  SetSystemTime(&st);
}
int APIENTRY WinMain(HINSTANCE hInstance,
     HINSTANCE hPrevInstance,
     LPSTR   lpCmdLine,
     int    nCmdShow)
{
  //初始化TCP协议
  WSADATA wsaData;
  if(WSAStartup(MAKEWORD(2,2), &wsaData)!= 0)
  {
    MessageBox(NULL, "初始化网络协议失败!", "错误报告", MB_OK|MB_ICONHAND);
    return -1;
  }

  int i = 0;
  unsigned long ulTime = 0;

  while (sever[i] != NULL)
  {
    if (GetRemoteTime(sever[i], ulTime))
    {
      MySetTime(ulTime);
      char buff[100];
      sprintf(buff, "已成功与时间服务器\r\n%s\r\n的时间同步", sever[i]);
      MessageBox(NULL, buff, "成功报告", MB_OK|MB_ICONINFORMATION);
      return 0;
    }
    i++;
  }
  MessageBox(NULL, "所有服务器均不能正常连接或超时!", "错误报告", MB_OK|MB_ICONHAND);
  WSACleanup();
  return 0;
}

至于使用UDP协议实现程序详见本文附带的代码。 

四、结束语

程序在VC6+WinXP下编写调试正确,并在Win98下运行正确。时间精度本人不敢妄下结论,但经与电视台对时,应小于1秒。也可到国家授时中心上去对时。但通常第一次打开这个网页时服务器时间和本地时间差别大些,多刷新几次又几乎一致了。

本文配套源码

上一页  1 2 3 

Tags:利用 RFC 协议

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接