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

为了实现内网间机子的时钟同步,需要用到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






  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值