为什么时差为零,即使我联系的是两个不同时区的服务器?

Why is time difference zero, even if I am contacting servers in two different time zones?

我编写了一个 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);

请让我知道我的方法是否正确。 感谢您花时间分析和回答我的问题。

这是示例输出:

2016 年 10 月 7 日星期五19:34:59

2016 年 10 月 7 日星期五19:34:58

times:1.000000

之间的差异

ctime returns 一个time_t值,是秒的整数。

所以你的结果只能是0秒、1秒、2秒等等。

不会有数千秒的差异,因为两个服务器return世界时间,而不是每个服务器的本地时间。

time protocol(您似乎正在使用)中,服务器 returns 自 1900 年 1 月 1 日午夜 UTC(不是当地时间午夜或任何其他时间)以来的秒数区)。请注意,这是从特定时刻开始测量的,从那以后经过的时间量是相同的,无论您处于哪个时区。因此,服务器将 return (几乎)相同的值时间,不管他们在哪个时区。