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



我编写了一个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秒,等等

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

最新更新