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






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章