我写了一个TCP客户端来联系两台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: %s\n", 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);
如果我的方法是正确的,请告诉我。 感谢您花时间分析并回答我的问题。
以下是示例输出:
10月7日星期五19:34:59
10月7日星期五19:34:58
时间差:1.000000
答案 0 :(得分:0)
在time protocol(您似乎正在使用)中,服务器返回自1900年1月1日午夜UTC(不是当地时间午夜或任何其他时区)以来的秒数。请注意,这是从特定时刻开始计算的,并且从那时起所经过的时间量是相同的,无论您处于什么时区。因此,服务器将同时返回(几乎)相同的值,而不管是什么他们所处的时区。
答案 1 :(得分:-2)
ctime返回time_t值,该值是秒的整数。
所以你的结果只能是0秒,1秒,2秒等等。
不会有数千秒的差异,因为两台服务器都返回通用时间,而不是每台服务器的本地时间。