掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
wininetのエラー処理について (ID:44982)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
wininetのエラー処理についてですが、以下のようなプログラムで サーバーから時間を取得しています。(ntpが使えない環境なので) サーバーが稼動している場合は問題ないのですが、止まっている 場合とか見つからない場合は、何も戻ってきません。 見つからない場合はこのプログラムが稼動しているパソコンの 時間を戻すようにしたいのですが、どうすればいいでしょうか? よろしくお願いします。 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Wininet, DateUtils; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; procedure Button1Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} function GetMyServerTime : TDateTime ; const // Httpで時間取得するサーバー名 URL = 'http://10.1.1.11/'; var InetHandle, IOpenHandle: HINTERNET; Buffer: array[0..255] of Char; BufSize, Dummy: Cardinal; Y, M, D, H, N, S: Word; MStr: String; HttpDateTime: TDateTime; Code : Cardinal; begin Result := Now; InetHandle := InternetOpen(nil, INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0); //InetHandle := InternetOpen(nil, INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); if InetHandle=nil then begin Code:=GetLastError; raise Exception.Create(Format('Error %d Description %s',[Code,SysErrorMessage(Code)])); end; try if (not Assigned(InetHandle)) then begin Exit; end; IOpenHandle := InternetOpenUrl(InetHandle, URL, nil, 0, INTERNET_FLAG_RELOAD, 0); try if (not Assigned(IOpenHandle)) then begin Exit; end; if IOpenHandle=nil then begin Code:=GetLastError; raise Exception.Create(Format('Error %d Description %s',[Code,SysErrorMessage(Code)])); end; BufSize := Length(Buffer); FillChar(Buffer, BufSize, 0); Dummy := 0; if HttpQueryInfo(IOpenHandle, HTTP_QUERY_DATE, @Buffer, BufSize, Dummy) then begin Y := StrToIntDef(Copy(Buffer, 13, 4), 0); MStr := LowerCase(Copy(Buffer, 9, 3)); if (MStr = 'jan') then M := 1 else if (MStr = 'feb') then M := 2 else if (MStr = 'mar') then M := 3 else if (MStr = 'apr') then M := 4 else if (MStr = 'may') then M := 5 else if (MStr = 'jun') then M := 6 else if (MStr = 'jul') then M := 7 else if (MStr = 'aug') then M := 8 else if (MStr = 'sep') then M := 9 else if (MStr = 'oct') then M := 10 else if (MStr = 'nov') then M := 11 else if (MStr = 'dec') then M := 12 else M := 0; D := StrToIntDef(Copy(Buffer, 6, 2), 0); H := StrToIntDef(Copy(Buffer, 18, 2), MAXWORD); N := StrToIntDef(Copy(Buffer, 21, 2), MAXWORD); S := StrToIntDef(Copy(Buffer, 24, 2), MAXWORD); // なぜか世界標準時が返されるので、 Hに +9時間としている。 if TryEncodeDateTime(Y, M, D, H + 9, N, S, 0, HttpDateTime) then begin Result := HttpDateTime; end else Result := now; end; finally InternetCloseHandle(IOpenHandle); end; finally InternetCloseHandle(InetHandle); end; end; procedure TForm1.Button1Click(Sender: TObject); begin Edit1.Text:= DateTimeToStr(GetMyServerTime); end; end.
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.