Objective CVisual Studio 6Visual C++ 7.0Windows 2000Visual C++ 6.0Windows XPMFC中级开发Visual StudioWindowsC++
时间客户端 (RFC868)






2.88/5 (5投票s)
2002年2月24日
2分钟阅读

126469

1895
了解如何同步您的日期和时间
引言
本文描述了一个使用 RFC 868 协议的时间客户端。该程序使用 TCP 端口 37 与时间服务器连接。这是一个基于 MFC 的控制台应用程序。
以下代码块计算当前日期和时间。
lnTime = (long)((sBuffer - (unsigned long)(DATE_1970)));
Time_Int64 = Int32x32To64(lnTime, 10000000) + 116444736000000000;
FileTime.dwLowDateTime = (DWORD)Time_Int64;
FileTime.dwHighDateTime = Time_Int64 >> 32;
FileTimeToLocalFileTime(&FileTime, &LocalFileTime);
FileTimeToSystemTime(&LocalFileTime, &SystemTime);
SetLocalTime( &SystemTime );
时间首先在第一行和第二行中计算并转换为 64 位数,然后转换为本地时区,最后转换为 SYSTEMTIME
结构。最后,设置系统时间。
以下是与时间服务器通信的过程。(这些注释是从 http://www.faqs.org/rfcs/rfc868.html 复制而来。)
- S: 在端口 37 (八进制 45) 上监听
- U: 连接到端口 37
- S: 发送一个 32 位二进制数的时间
- U: 接收时间
- U: 关闭连接
- S: 关闭连接
服务器在端口 37 上监听连接。当连接建立后,服务器返回一个 32 位时间值并关闭连接。如果服务器无法确定其所在位置的时间,则应拒绝连接或在不发送任何内容的情况下关闭连接。最重要的是,时间是自 1900 年 1 月 1 日 GMT 午夜 00:00 以来的秒数,其中时间 1 是 1900 年 1 月 1 日 GMT 上午 12:00:01;此基准将一直有效到 2036 年。
例如
- 2,208,988,800 对应于 1970 年 1 月 1 日 00:00 GMT
- 2,398,291,200 对应于 1976 年 1 月 1 日 00:00 GMT
- 2,524,521,600 对应于 1980 年 1 月 1 日 00:00 GMT
- 2,629,584,000 对应于 1983 年 5 月 1 日 00:00 GMT
- 而 -1,297,728,000 对应于 1858 年 11 月 17 日 00:00 GMT。
你可以使用 time.ien.it 时间服务进行测试 (settime time.ien.it)。希望你喜欢我的时间客户端。你可以发送任何错误或评论到下方。
许可证
本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。
作者可能使用的许可证列表可以在此处找到。