浅谈daytime协议和时间协议(1)


这次我们主要讲解一下daytime协议和时间协议相关服务的问题,让我们一起来了解一下daytime协议、时间协议的内容吧。在一个局域网中,许多系统都要求每台计算机能够保持时间的一致性,WIN2000系统提供了与主域服务器时间同步功能,即工作站只要登录到主域服务器,工作站系统的时间自动与主域服务器时间一致,但接下来的问题是我们如何使主域服务器的时间同步世界标准时间.如要获得世界标准时间,比较精确的做法是使用GPS卫星时钟获得毫秒级精度的标准时间,但这是要money的哦.如果我们在时间精度上只需要秒级的,又能够连接到Internet,则我们可以利用Internet上的标准时间服务器获得标准时间.

事实上在Internet上有三个不同的时间服务,每一个都由Request for CommentRFC)定义为Internet日期时间标准.这三个标准分别为:RFC-867、RFC-868和RFC-1305.下面就先介绍RFC-867:

RFC867 Daytime协议(RFC867 Daytime Protocol)

本RFC规范了一个ARPA Internet community上的标准.在ARPA Internet上的所有主机应当采用和实现这个标准.

一个有用的测量和调试工具就是daytime协议服务.它的作用就是返回当前时间和日期,格式是字符串格式.

◆基于TCP的daytime服务

daytime服务是基于TCP的应用,服务器在TCP端口13侦听,一旦有连接建立就返回ASCII形式的日期和时间(接收到的任何数据被忽略),在传送完后关闭连接.

◆基于UDP的daytime协议服务

daytime服务也可以使用UDP协议,它的端口也是13,不过UDP是用数据报传送当前时间的.接收到的数据被忽略.

◆Daytime格式

对于daytime协议没有特定的格式,建议使用ASCII可打印字符,空格和回车换行符.daytime应该在一行上.

下面是两种流行的格式:

一种流行的格式是:Weekday, Month Day, Year Time-Zone

例子:Tuesday, February 22, 1982 17:37:43-PST

另一种流行的格式用于SMTP中:dd mmm yy hh:mm:ss zzz

例子:02 FEB 82 07:59:01 PST

注意:对于机器来说,有用的时间采用了时间协议Time Protocol RFC-868)

接下来我们用VB程序实现通过RFC867协议设置我们自己的计算机系统时间,为使程序简化,程序未进行日期校正,只进行时间校正.在FORM1中添加1个Winsock控件,将下面代码剪贴到FORM1的代码窗体中即可:

Option Explicit

采用RFC867 Daytime协议获取标准时间例程

www.time.ac.cn为中科院国家授时中心,采用北京时间

时间格式:Mon Jul 26 09:58:57 2004

time.nist.gov为美国标准技术院,采用格灵威时间

  1. 时间格式:53212 04-07-26 02:00:12 50 0 0 488.3 UTC(NIST) *  
  2. Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)  
  3. Dim NoSrv As Boolean  
  4. Dim TimeFromNet  
  5. Private Sub Form_Load()  
  6. Winsock1.Protocol = sckTCPProtocol '采用TCP协议  
  7. NetTime "www.time.ac.cn" '首先取中科院国家授时中心时间  
  8. If NoSrv Or TimeFromNet = "" Then 

若未取到中科院国家授时中心时间,则取美国标准技术院时间

  1. NetTime "time.nist.gov"  
  2. If NoSrv Or TimeFromNet = "" Then 

若不能取美国标准技术院时间,则报错

  1. MsgBox "检测不到网络标准时间服务器time.nist.gov!"  
  2. Else 

为使网络传输误差减小,第2次再取美国标准技术院时间

  1. NetTime "time.nist.gov" 
  2. If TimeFromNet = "" Then  
  3. MsgBox "网络标准时间服务器time.nist.gov超时!" 
  4. Else  
  5. TimeFromNet = Mid(TimeFromNet, 17, 8)  
  6. TimeFromNet = TimeSerial((Hour(TimeFromNet) + 8) Mod 24, Minute(TimeFromNet), Second(TimeFromNet))  
  7. Time = TimeFromNet '设置系统时间  
  8. End If  
  9. End If  
  10. Else 

为使网络传输误差减小,第2次再取中科院国家授时中心时间


相关内容