我试图使用以下代码连接到时间服务器并获得时间,但没有成功:
Dim ntpServer As String = "time.windows.com"
Dim ntpData(47) As Byte
Dim addresses = Dns.GetHostEntry(ntpServer).AddressList
Dim EndP As IPEndPoint = New IPEndPoint(addresses(0), 123)
Dim soc As Socket = New Socket(AddressFamily.InterNetwork, _
SocketType.Dgram, ProtocolType.Udp)
soc.Connect(EndP)
soc.Send(ntpData)
soc.Receive(ntpData)
soc.Close()通过程序进行跟踪,我无法通过下面的代码行soc.Receive(ntpData)。我做错了什么?
谢谢
发布于 2013-10-30 16:13:54
您需要向服务器提供一些基本信息:
ntpData(0) = 27
ntpData(0)包含一个名为firstByteBits的节。
本节需要在发送数据以查询答复之前设置。
第一个字节是
0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
|LI | VN |Mode |00011011 = 27 = 0x1B
可能还有更好的NTP服务器。众所周知,time.windows.com:123服务器池速度慢,有时有一段时间没有响应,而且精度很低。更好的是:pool.ntp.org:123 (但请阅读poo.ntp.org上关于常规使用的内容)。
有关更多细节,请参见RFC 5905。
https://stackoverflow.com/questions/19683452
复制相似问题