在线对时器的作用是从Internet上获取准确的时间。它的基本设计思想是开发出客户端工具, 以此登录到网络上的授时服务器并获取它的准确时间, 然后根据这个时间来校对本机的系统时间。下面以C语言为开发工具, 介绍一种简单的在线定时器的实现方法。
Internet上可用的授时服务器很多, 这里采用香港的官方授时服务器 (IP地址:210.0.235.14) 。
核心代码如下。
我们这里采用的授时服务器, 返回给客户端的是1900年1月1日0点0分0秒到现在的秒数, 是整型数字。而我们将要使用的接收服务器返回的消息的recv函数, 它相应的参数是字符指针类型, 因此需要进行类型转换, 这在代码中将得到体现。具体如下。
MessageB ox (NULL, buff, TEXT ("以秒数代表的当前时间") , MB_OK) ;
我们得到的对话框如图1所示。
为什么得到的结果明显不对呢?这涉及到字节顺序的问题, 也就是说我们的客户机存储的整数的字节顺序和授时服务器不一致, 导致传过来的ulTime没有得到正确的还原。这个问题很好解决, 我们在将ulTime写到缓冲区之前, 使用ntohl函数对u l T i m e做个处理即可 (u l T i m e=n t o h l (ulTime) ) 。
下面我们要将上面得到的一串数字转换为我们看得懂的字符形式的时间, 我们用以下代码实现。
以上代码将接收到的以ulTime代表的秒数转换为了st这个结构体变量所代表的字符形式的时间 (st中包含了年、月、日、时、分、秒的信息) 。
我们将st中的内容打印出来看一下, 用以下代码实现。
MessageB ox (NULL, buff, TEXT ("字符形式的时间") , MB_OK) ;
打印出来的结果如图2所示。
为什么得到的小时不对呢?很简单, 中国在东八区, 应该在小时上加上8, 也就是将st.w Hour改为st.w Hour+8。
经过以上的测试, 我们已经得到了授时服务器上的准确时间。将这个时间设置成本地系统时间即可, 代码只需一句。
SetSys temTime (&s t) ;//将st这个结构体变量所对应的时间赋给本机。
本文介绍了用C语言实现的在线对时器开发的基本思路和核心代码。用其它高级语言开发在线对时器的基本方法与此类似。希望这样的客户端工具的开发, 对于想深入学习网络编程的朋友, 能起到一个铺垫的作用。
摘要:利用Internet传送标准时间信息称做网络授时。目前网上有很多授时服务器, 我们可以用高级语言写一个在线对时器, 获取授时服务器上的时间并以此来校对本机时间。本文以C语言为工具, 实现了一个简单的在线对时器的开发。
关键词:C语言,在线对时
[1] 谭浩强.C程序设计[M].清华大学出版社, 1999.
[2] 佩措尔德.Windows程序设计[M].清华大学出版社, 2010.
推荐阅读:
用C语言证明哥德巴赫猜想06-04
c语言排序算法总结06-25
c语言课程设计指导书06-23
c语言程序设计作业三06-24
c语言课程设计电话簿06-28
江南大学考研C语言2008真题06-18
《C语言程序设计》精品试题(附讲解答案)06-10
实现目标的关键06-15
如何实现自己的梦想06-08
关于实现理想的演讲稿06-06