您的位置:首页 > 编程语言 > C#

C# NTP 时钟同步,获取指定IP地址的系统时间及错误问题解决。

2013-06-04 12:20 1716 查看
为了实现内网间机子的时钟同步,需要用到NTP协议的,所以做了一下这方面工作。

实现获取指定IP系统时间的代码在网上有现成的:

这里有一个网友提供的免费下载的地址:http://wenku.baidu.com/view/07d8aad53186bceb19e8bb25.html

调用的方法如下:

var client = new SNTPTimeClient("127.0.0.1", "123");
client.Connect();
DateTime getEd = client.ReceiveTimestamp;//获取指定IP的系统时间
var st = new SystemTime
{
wDay = (ushort)getEd.Day,
wDayOfWeek = (ushort)getEd.DayOfWeek,
wHour = (ushort)getEd.Hour,
wMiliseconds = (ushort)getEd.Millisecond,
wMinute = (ushort)getEd.Minute,
wMonth = (ushort)getEd.Month,
wSecond = (ushort)getEd.Second,
wYear = (ushort)getEd.Year
};
SNTPTimeClient.SetLocalTime(ref st);//设置本地时间

注:

1、NTP基于UDP报文进行传输,使用的UDP端口号为123。

2、指定的IP可以是公网的IP,下面是一些网络上提供的时间服务器IP地址。

210.72.145.44

203.117.180.36

131.107.1.10

64.236.96.53

130.149.17.21

66.92.68.246

18.145.0.30

137.92.140.80

133.100.9.2

128.118.46.3

210.72.145.44(中国国家授时中心服务器IP地址)

202.120.2.101 (上海交通大学网络中心NTP服务器地址)

3、也可以内网局域网的,但是我测试的时候,出现了以下几个错误(win7下的操作):

1、远程主机强迫关闭了一个现有的连接。



解决办法:运行 -- services.msc -- 找到Windows Time并开启。你也可以设置他的属性为自动的。

2、由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。



解决办法:

1、有可能是指定IP的主机的NTP服务没有开启,运行 -- gpedit.msc -- 计算机配置 -- 管理模版 -- 系统 -- windows时间服务 --时间提供程序,在右侧找到“启用 Windows NTP 服务器”双击选择--“已启用”-- 确定,可以参照下面给出下载链接里的PDF文件。

2、有可能是指定IP的主机的Windows Time服务没有开启。解决方法如上面。

3、有可能是指定IP的主机的防火墙阻止了123端口,控制面板--防火墙--入站规则--右侧一栏点击新建规则--端口--UDP--特定本地端口:123-- 允许链接--全选--随便取个名字。确定开启。

源码及文档下载:http://download.csdn.net/detail/wushang923/5514821

下载内容(大部分本文已给出):

1、SNTP时钟同步,获取指定IP主机系统时间并设置本地时间的程序源码。

2、客户端调用方法。

3、winXP及win7下开启NTP服务方法.pdf

4、NTP协议格式(中文).doc
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: