|
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
|