お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"時間設定プロトコルの実現"




やり方の一部だけになりますが、時間設定プログラムを作ったことがあるので
それの掲載をします。
私の WSock コンポを使っての実装ですのでそのままでは使用できないでしょう。^^;
それに、汚いです。許して下さい。m(_ _)m

これはサーバで daytime プロトコルが使用できる環境に限ります。
でも、実際は、daytime プロトコルの実装自身が OS によって違う<よう>なの
で私は信用できるサーバを設定する方法で逃げました。
本当は NTP を使って、clock.nc.fukuoka-u.ac.jp へ接続する方が良いんでしょ
うね。
ま、何かの参考になれば。



procedure TTimeWatchDaemon.Button1Click(Sender: TObject);
var
  data: PChar;
begin
  Winsock1.StartUp;

  getmem( data, 1 );
  data^ := #0;

  UDPC1.StartUp;
  UDPC1.Send( data, 1 );
end;

procedure TTimeWatchDaemon.UDPC1DataArrive(Sender: TObject; Count: Integer);
var
  data: PChar;
  ADateTime: String;
  ASplit: TStringList;
  MyTime:TSystemTime;
  Index: Integer;
begin
  getmem( data, Count + 1 );
  zeromemory( data, Count + 1 );
  TUDPC( Sender ).Read( data );

  if FHostList.Count = 0 then exit;

  if FHostList.Find( UDPC1.ReciveHost, Index ) = False then exit;

  ASplit := TStringList.Create;
  ADateTime := StrPas( data );
  While Pos( ':', ADateTime ) <> 0 do
  begin
    ADateTime[ Pos( ':', ADateTime ) ] := ' ';
  end;
  ASplit.CommaText := ADateTime;
  with MyTime do
  begin
    wMilliseconds := 0;
    wDayOfWeek := 0;
    try
      wYear := StrToInt( ASplit[6] );
    except
      wYear := 1998;
    end;
    if ASplit[1] = 'Jan' then wMonth := 1;
    if ASplit[1] = 'Feb' then wMonth := 2;
    if ASplit[1] = 'Mar' then wMonth := 3;
    if ASplit[1] = 'Apr' then wMonth := 4;
    if ASplit[1] = 'May' then wMonth := 5;
    if ASplit[1] = 'Jun' then wMonth := 6;
    if ASplit[1] = 'Jul' then wMonth := 7;
    if ASplit[1] = 'Aug' then wMonth := 8;
    if ASplit[1] = 'Sep' then wMonth := 9;
    if ASplit[1] = 'Oct' then wMonth := 10;
    if ASplit[1] = 'Nov' then wMonth := 11;
    if ASplit[1] = 'Dec' then wMonth := 12;
    try
      wDay := StrToInt( ASplit[2] );
    except
      wDay := 1;
    end;

    try
      wHour := StrToInt( ASplit[3] );
    except
      wHour := 1;
    end;

    try
      wMinute := StrToInt( ASplit[4] );
    except
      wMinute := 1;
    end;

    try
      wSecond := StrToInt( ASplit[5] );
    except
      wSecond := 1;
    end;

  end;
  SetLocalTime( MyTime );
  freemem( data );
end;

                                     98/09/13(日) 23:14 遠藤 俊裕(SGU02140)

Original document by 遠藤 俊裕   氏 ID:(SGU02140)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum