爲了實現內網間機子的時鐘同步,需要用到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