嵌入式Linux網絡編程之:實驗內容——NTP協(xié)議實現
/*修改本地時間*/
intset_local_time(structntp_packet*pnew_time_packet)
{
structtimevaltv;
tv.tv_sec=pnew_time_packet->transmit_timestamp.coarse-JAN_1970;
tv.tv_usec=USEC(pnew_time_packet->transmit_timestamp.fine);
returnsettimeofday(tv,NULL);
}
intmain()
{
intsockfd,rc;
structaddrinfohints,*res=NULL;
structntp_packetnew_time_packet;
memset(hints,0,sizeof(hints));
hints.ai_family=AF_UNSPEC;
hints.ai_socktype=SOCK_DGRAM;
hints.ai_protocol=IPPROTO_UDP;
/*調用getaddrinfo()函數,獲取地址信息*/
rc=getaddrinfo(NTP_SERVER_IP,NTP_PORT_STR,hints,res);
if(rc!=0)
{
perror(getaddrinfo);
return1;
}
/*創(chuàng)建套接字*/
sockfd=socket(res->ai_family,res->ai_socktype,res->ai_protocol);
if(sockfd0)
{
perror(socket);
return1;
}
/*調用取得NTP時間的函數*/
if(get_ntp_time(sockfd,res,new_time_packet))
{
/*調整本地時間*/
if(!set_local_time(new_time_packet))
{
printf(NTPclientsuccess!n);
}
}
close(sockfd);
return0;
}
為了更好地觀察程序的效果,先用date命令修改一下系統(tǒng)時間,再運行實例程序。運行完了之后再查看系統(tǒng)時間,可以發(fā)現已經恢復準確的系統(tǒng)時間了。具體運行結果如下所示。
$date-s2001-01-011:00:00
2001年01月01日星期一01:00:00EST
$date
2001年01月01日星期一01:00:00EST
$./ntp
NTPclientsuccess!
$date
能夠顯示當前準確的日期和時間了!
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評論