2016-10-08 2 views
0

2台のNISTサーバーに接続して両方の時間を取得するためにTCPクライアントを作成しました。私は、両方のサーバーに連絡し、unixepochを使用してシステム時間に変換するために2つのソケットを作成しました。私は出力の差として数千秒を期待していましたが、差は0秒または数秒です。一日中作業した後でさえ、私のコードでエラーを理解することができませんでした。2つの異なるタイムゾーンでサーバーに接続しても、時間差がゼロになるのはなぜですか?

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日午後07時34分59秒2016

金10月7日午後7時34分58秒2016

違い:1.000000

答えて

0

time protocol(使用しているように見えます)では、サーバーは1900年1月1日(UTC)の深夜(ローカル時間の午前0時または他の時間帯ではない)からの秒数を返します。これは特定の瞬間からの測定であり、それ以降の経過時間はあなたのタイムゾーンに関係なく同じです。したがって、サーバは何時でも同じ値を(同じ)ほぼ同時に返します彼らがいるタイムゾーン。

+0

ポイントを得ました。しかし、私はそれを実装して正しい時間差を得ることができますか? – ZealousCoder

+0

サーバが秒単位で返されるだけの場合、何もしている以上のことはできません。何を正確にしようとしていますか? –

+0

タイムゾーンの異なる2つのサーバーに接続しようとすると、ローカルタイムと両方のタイムゾーンの差が表示されます。 – ZealousCoder

-2

のctime秒の整数であるtime_t値を返します。

結果は0秒、1秒、2秒などとなります。

両方のサーバーが各サーバーの現地時間ではなく世界時を返すため、数千秒の違いはありません。

関連する問題