1. 程式人生 > 其它 >golang獲取ntp伺服器時間

golang獲取ntp伺服器時間

packagemain
import( "encoding/binary" "flag" "fmt" "log" "net" "time" )
constntpEpochOffset=2208988800
typepacketstruct{ Settingsuint8 Stratumuint8 Pollint8 Precisionint8 RootDelayuint32 RootDispersionuint32 ReferenceIDuint32 RefTimeSecuint32 RefTimeFracuint32 OrigTimeSecuint32 OrigTimeFracuint32 RxTimeSecuint32 RxTimeFracuint32 TxTimeSecuint32 TxTimeFracuint32 }
funcmain(){ varhoststring flag.StringVar(&host,"e","182.92.12.11:123","NTPhost") flag.Parse()
conn,err:=net.Dial("udp",host) iferr!=nil{ log.Fatalf("failedtoconnect:%v",err) } deferconn.Close() iferr:=conn.SetDeadline(time.Now().Add(15*time.Second));err!=nil{ log.Fatalf("failedtosetdeadline:%v",err) }
req:=&packet{Settings:0x1B}
iferr:=binary.Write(conn,binary.BigEndian,req);err!=nil{ log.Fatalf("failedtosendrequest:%v",err) }
rsp:=&packet{} iferr:=binary.Read(conn,binary.BigEndian,rsp);err!=nil{ log.Fatalf("failedtoreadserverresponse:%v",err) }
secs:=float64(rsp.TxTimeSec)-ntpEpochOffset nanos:=(int64(rsp.TxTimeFrac)*1e9)>>32
showtime:=time.Unix(int64(secs),nanos) fmt.Printf("%v\n",showtime) }