ntp协议原理linux网络编程,嵌入式Linux网络编程之:实验内容——NTP协议实现

本文引用地址:http://www.eepw.com.cn/article/257114.htm

/*修改本地时间*/

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;

}

/*创建套接字*/

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命令修改一下系统时间,再运行实例程序。运行完了之后再查看系统时间,可以发现已经恢复准确的系统时间了。具体运行结果如下所示。

$date-s2001-01-011:00:00

2001年01月01日星期一01:00:00EST

$date

2001年01月01日星期一01:00:00EST

$./ntp

NTPclientsuccess!

$date

能够显示当前准确的日期和时间了!

你可能感兴趣的:(ntp协议原理linux网络编程,嵌入式Linux网络编程之:实验内容——NTP协议实现)