NTPサーバにアクセスするには?

解決


ヘリーナ  2004-02-10 02:10:18  No: 7010

初めまして。ヘリーナと申します。delphi始めてちょうど一月になります。
NTPサーバにアクセスして正確な時間を取得して、PCの時計を合わせる
というプログラムを作ろうと思っているのですが、どうしたらいいのか
わかりません。コンポーネントがあるらしいのですが、使い方が・・・。
ver.6のprofessionalです。できればソースコードを載せていただけると
ありがたいのですが。誰か教えてください。お願いします。


にしの  2004-02-10 04:17:46  No: 7011

TIdSNTPで出来ませんか?
Delphi7Proでは、プロパティを設定してSyncTimeを呼ぶだけで時刻合わせできました。
Delphi6で出来るかは未確認です。


ヘリーナ  2004-02-11 01:20:57  No: 7012

にしのさん、レスありがとうございます。
TIdSNTPというコンポーネントがありました。
しかし、私はネットワークの知識に明るくないので
プロパティの設定やどのようなソースを書いたらいいのか
よくわかりません。ヘルプやネットで調べましたが
サンプルソースなどが載っていないので困っています。
できれば詳しく教えていただけるとありがたいです。
また、それについて詳しく解説しているホームページなどが
ありましたら教えてください。
よろしくお願いします。


にしの  2004-02-11 01:29:38  No: 7013

例えば、Hostプロパティにntp1.jst.mfeed.ad.jpと入れるだけです。
ヘルプには載っていませんか?Delphi7Proには英語版のヘルプがあり、Updateに日本語版が公開されていました。


ヘリーナ  2004-02-20 00:57:40  No: 7014

どうしてもサーバから時刻が取れません。
以下のようなソースを書いています。

procedure TForm1.Timer1Timer(Sender: TObject);
var
    SDT: String;
begin
      //PCの現在の時刻を表示
    Label2.Caption := DateToStr(Date);
    Label4.Caption := TimeToStr(Time);

    IdSNTP1.Host := 'clock.nc.fukuoka-u.ac.jp';
    IdSNTP1.Port := 123;

    IdSNTP1.Active := True;

    Label6.Caption := DateTimeToStr(IdSNTP1.DateTime);

    IdSNTP1.Active := False;

    if IdSNTP1.SyncTime then
       ShowMessage('TRUE')
    else
       ShowMessage('FALSE');

   IdSNTP1.free;
end;

サーバから取得される日は1899/12/30になっています。
SyncTimeもFALSEを返してきます。


にしの  2004-02-20 02:07:49  No: 7015

TimerでIdSNTP1.free;していますが、どこかでIdSNTP1を再作成しているのでしょうか。


  2004-02-20 02:34:47  No: 7016

よく知りませんが、
IdSNTP1.SyncTimeは、
ActiveをFalseにした後でもTrueが返ってくるものですか?

二度と使わないならFreeでも構わないと思いますけど。


にしの  2004-02-20 03:18:16  No: 7017

2度と使わないのであれば、Timer.EnabledはいつFalseになるのでしょう。
ここに提示されたものだけでは、何度も呼び出されそうな気がしますので。

Activeはあまり関係ないですね。
ソースを見ると、DateTimeを取得して、取得できたら同期を取るようです。
DateTimeは、readにGetDateTimeが設定されていて、GetDateTimeで時刻を取得しています。

2つめの発言で、
> Delphi7Proでは、プロパティを設定してSyncTimeを呼ぶだけで時刻合わせできました。
と書いたときにも、ActiveはFalseのまま試してから書いているので、やはり関係なさそうです。


  2004-02-20 04:40:42  No: 7018

Active関係なかったですね。

これでどうでしょうか?
function GetSNTPTime(Server: String): TDateTime;
begin
  with TIdSNTP.Create(Self) do
  try
    Port:= 123;
    Host:= Server;
    Result:= DateTime;
  finally
    Free;
  end;
end;

//使う時の例
Label1.Caption:=
  FormatDateTime('YY/MM/DD HH:MM:SS',GetSNTPTime('clock.nc.fukuoka-u.ac.jp'));


ヘリーナ  2004-02-21 02:55:10  No: 7019

皆さん、ありがとうございます。
時間が取れました!
ソースの書き方に問題があったようです。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加