微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 嵌入式Linux网络编程之:实验内容——NTP协议实现

嵌入式Linux网络编程之:实验内容——NTP协议实现

时间:08-13 来源:3721RD 点击:

ret_time-> ret_time->precision = ntohl(data[3]);

ret_time->root_delay = ntohl(*(int*)&(data[4]));

ret_time->root_dispersion = ntohl(*(int*)&(data[8]));

ret_time->reference_identifier = ntohl(*(int*)&(data[12]));

ret_time->reference_timestamp.coarse = ntohl *(int*)&(data[16]));

ret_time->reference_timestamp.fine = ntohl(*(int*)&(data[20]));

ret_time->originage_timestamp.coarse = ntohl(*(int*)&(data[24]));

ret_time->originage_timestamp.fine = ntohl(*(int*)&(data[28]));

ret_time->receive_timestamp.coarse = ntohl(*(int*)&(data[32]));

ret_time->receive_timestamp.fine = ntohl(*(int*)&(data[36]));

ret_time->transmit_timestamp.coarse = ntohl(*(int*)&(data[40]));

ret_time->transmit_timestamp.fine = ntohl(*(int*)&(data[44]));

return 1;

} /* end of if select */

return 0;

}

/* 修改本地时间 */

int set_local_time(struct ntp_packet * pnew_time_packet)

{

struct timeval tv;

tv.tv_sec = pnew_time_packet->transmit_timestamp.coarse - JAN_1970;

tv.tv_usec = USEC(pnew_time_packet->transmit_timestamp.fine);

return settimeofday(&tv, NULL);

}

int main()

{

int sockfd, rc;

struct addrinfo hints, *res = NULL;

struct ntp_packet new_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");

return 1;

}

/* 创建套接字 */

sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);

if (sockfd <0 )

{

perror("socket");

return 1;

}

/*调用取得NTP时间的函数*/

if (get_ntp_time(sockfd, res, &new_time_packet))

{

/*调整本地时间*/

if (!set_local_time(&new_time_packet))

{

printf("NTP client success!\n");

}

}

close(sockfd);

return 0;

}

为了更好地观察程序的效果,先用date命令修改一下系统时间,再运行实例程序。运行完了之后再查看系统时间,可以发现已经恢复准确的系统时间了。具体运行结果如下所示。

$ date -s "2001-01-01 1:00:00"

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

$ date

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

$ ./ntp

NTP client success!

$ date

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top