我编写了一个TCP Client来联系两个NIST服务器并获取两者之间的时间差。我创建了两个套接字,用于连接两个服务器,然后使用unixepoch将它们转换为系统时间。虽然我期望输出的差异是数千秒,但我得到的差异是0或几秒。即使我工作了一整天,我也无法找出代码中的错误。
char *host = "129.6.15.29"; /* Maryland NIST server */
char *host1="216.228.192.69"; /*Oregon NIST server*/
char *service = "time"; /* default service name */
time_t now1,now2; /* 32-bit integer to hold time */
int s1,s2, n1,n2; /* socket descriptor, read count*/
double diff_t;
switch (argc) {
case 1:
host = "129.6.15.29";
host1="216.228.192.69";
break;
case 4:
service = argv[3];
case 3:
host = argv[1];
host1= argv[2];
break;
default:
fprintf(stderr, "usage: TCPTime [host [port]]n");
exit(1);
}
s1 = connectTCP(host, service);
s2= connectTCP1(host1,service);
(void) write(s1, MSG, strlen(MSG));
(void) write(s2,MSG, strlen(MSG));
/* Read the time */
n1 = read(s1, (char *)&now1, sizeof(now1));
n2 = read(s2, (char *)&now2, sizeof(now2));
if (n1 < 0|| n2<0 )
errexit("read failed: %sn", strerror(errno));
now1 = ntohl((unsigned long)now1); /* put in host order */
now1 -= UNIXEPOCH; /* convert UCT to UNIX epoch */
now2 = ntohl((unsigned long)now2); /* put in host order */
now2 -= UNIXEPOCH; /* convert UCT to UNIX epoch */
printf("%s", ctime(&now1));
printf("%s", ctime(&now2));
diff_t=difftime(now1,now2);
printf("difference between times:%f",diff_t);
exit(0);
请让我知道我的方法是否正确。谢谢你花时间分析和回答我的问题。
下面是示例输出:
星期五Oct 7 19:34:59 2016
星期五Oct 7 19:34:58 2016
时间差:1.000000
在时间协议(您似乎正在使用)中,服务器返回自1900年1月1日UTC午夜(不是本地时间午夜或任何其他时区)以来的秒数。请注意,这是从一个特定的时刻开始测量的,从那以后经过的时间量是相同的,无论您处于哪个时区。因此,服务器将在同一时间返回(几乎)相同的值,而不管它们位于哪个时区。
ctime返回一个time_t值,该值是秒的整数。
所以你的结果只能是0秒,1秒,2秒,等等
不会有数千秒的差异,因为两个服务器都返回通用时间,而不是每个服务器的本地时间。