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

时间:2016-10-08 02:54:36

标签: c datetime tcpclient remote-server

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:-2)

ctime返回time_t值,该值是秒的整数。

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

不会有数千秒的差异,因为两台服务器都返回通用时间,而不是每台服务器的本地时间。