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
ポイントを得ました。しかし、私はそれを実装して正しい時間差を得ることができますか? – ZealousCoder
サーバが秒単位で返されるだけの場合、何もしている以上のことはできません。何を正確にしようとしていますか? –
タイムゾーンの異なる2つのサーバーに接続しようとすると、ローカルタイムと両方のタイムゾーンの差が表示されます。 – ZealousCoder