亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? idsntp.pas

?? delphi indy9.0.18組件包
?? PAS
字號:
{ $HDR$}
{**********************************************************************}
{ Unit archived using Team Coherence                                   }
{ Team Coherence is Copyright 2002 by Quality Software Components      }
{                                                                      }
{ For further information / comments, visit our WEB site at            }
{ http://www.TeamCoherence.com                                         }
{**********************************************************************}
{}
{ $Log:  10331: IdSNTP.pas
{
    Rev 1.1    6/1/2004 9:07:36 PM  DSiders
  Correct calculation for RoundTripDelay as per RFC 2030 errata.
}
{
{   Rev 1.0    2002.11.12 10:52:04 PM  czhower
}
unit IdSNTP;

{*
  Winshoe SNTP (Simple Network Time Protocol)
  Behaves more or less according to RFC-2030

  2002 Jan 21 Don
    Added suggestions from R. Brian Lindahl.
    Added CheckStratum property.
    Modified Disregard to use CheckStratum property.
    Modified GetAdjustmentTime to ignore optional NTP authentication in response.

  2002 Jan 3 Don
    Corrected errors introduced in previous revision.
    Added TIdSNTP.Create to assign port number for the SNTP protocol.

  2002 Jan 3 Don
    Corrected error in TIdSNTP.GetDateTime as per Bug Report
    http://sourceforge.net/tracker/?func=detail&atid=431491&aid=498843&group_id=41862

  2001 Sep 4 Don
    Corrected error in Flip() as reported on BCB newsgroup

  2000 Apr 21 Kudzu
    Updated to match UDP core changes

  2000 Mar 28 Hadi
    Continued conversion to Indy

	2000 Mar 24 Kudzu
    Converted to Indy

	2000 Jan 13 MTL
  	Moved to new Palette Tab scheme (Winshoes Clients)
    1999

  	R. Brian Lindahl - Original Author
*}

interface

uses
	Classes,
  IdUDPClient;

const
  NTPMaxInt = 4294967297.0;

type
	// NTP Datagram format
  TNTPGram	= packed record
    Head1: byte;
    Head2: byte;
    Head3: byte;
    Head4: byte;
    RootDelay: longint;
    RootDispersion: longint;
    RefID: longint;
    Ref1: longint;
    Ref2: longint;
    Org1: longint;
    Org2: longint;
    Rcv1: longint;
    Rcv2: longint;
    Xmit1: longint;
    Xmit2: longint;
  end;

  TLr = packed record
    L1: byte;
    L2: byte;
    L3: byte;
    L4: byte;
  end;

  TIdSNTP = class(TIdUDPClient)
  protected
    FDestinationTimestamp: TDateTime;   // Destination Timestamp   T4   time reply received by client
    FLocalClockOffset: TDateTime;       // = ((T2 - T1) + (T3 - T4)) / 2
    FOriginateTimestamp: TDateTime;     // Originate Timestamp     T1   time request sent by client
    FReceiveTimestamp: TDateTime;       // Receive Timestamp       T2   time request received by server
    FRoundTripDelay: TDateTime;         // = (T4 - T1) - (T2 - T3)
    FTransmitTimestamp: TDateTime;      // Transmit Timestamp      T3   time reply sent by server
    FCheckStratum: Boolean;
    //
    function Disregard(NTPMessage: TNTPGram): Boolean;
    function GetAdjustmentTime: TDateTime;
    function GetDateTime: TDateTime;
  public
    constructor Create(AOwner: TComponent); override;
    function SyncTime: Boolean;        // get datetime and adjust if needed
    //
    property AdjustmentTime: TDateTime read GetAdjustmentTime;
    property DateTime: TDateTime read GetDateTime;
    property RoundTripDelay: TDateTime read FRoundTripDelay;
    property CheckStratum: Boolean read FCheckStratum write FCheckStratum default True;
  end;

implementation

uses
  IdGlobal,
  IdAssignedNumbers,
  SysUtils;

function Flip(var Number: longint): longint;
var
  Number1: TLr;
  Number2: TLr;
begin
  Number1 := TLr(Number);

  Number2.L1 := Number1.L4;
  Number2.L2 := Number1.L3;
  Number2.L3 := Number1.L2;
  Number2.L4 := Number1.L1;  // ds 4-Sep-2001

  Result := longint(Number2);
end;

procedure DateTimeToNTP(ADateTime: TDateTime;var Second,Fraction: longint);
var
  Value1,
  Value2: Double;
begin
  Value1 := (ADateTime + TimeZoneBias - 2) * 86400;
  Value2 := Value1;

  if Value2 > NTPMaxInt then
  begin
    Value2 := Value2 - NTPMaxInt;
  end;

  Second := LongInt(Trunc(Value2));
  Value2 := ((Frac(Value1) * 1000) / 1000) * NTPMaxInt;

  if Value2 > NTPMaxInt then
  begin
    Value2 := Value2 - NTPMaxInt;
  end;

  Fraction := LongInt(Trunc(Value2));
end;

function NTPToDateTime(Second, Fraction: longint): TDateTime;
var
  Value1: Double;
  Value2: Double;
begin
  Value1 := Second;

  if Value1 < 0 then
  begin
    Value1 := NTPMaxInt + Value1 - 1;
  end;

  Value2 := Fraction;

  if Value2 < 0 then
  begin
    Value2 := NTPMaxInt + Value2 - 1;
  end;

  // Value2 := Value2 / NTPMaxInt;
  // Value2 := Trunc(Value2 * 1000) / 1000;

  Value2 := Trunc(Value2 / NTPMaxInt * 1000) / 1000;
  Result := ((Value1 + Value2) / 86400) - TimeZoneBias + 2;
end ;

{ TIdSNTP }

constructor TIdSNTP.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FPort := IdPORT_SNTP;
  FCheckStratum := True;
end;


function TIdSNTP.Disregard(NTPMessage: TNTPGram): Boolean;
var
  vStratum: Integer;
  vLeapIndicator: Integer;
begin
  vLeapIndicator := (NTPMessage.Head1 and 192 ) shr 6;
  vStratum :=  NTPMessage.Head2;

  Result := (vLeapIndicator = 3) or
    { (Stratum > 15) or (Stratum = 0) or }
    (((Int(FTransmitTimestamp)) = 0.0) and (Frac(FTransmitTimestamp) = 0.0));

  // DS ignore NTPGram when stratum is used, and value is reserved or unspecified
  if FCheckStratum and ((vStratum > 15) or (vStratum = 0)) then
  begin
    Result := True;
  end;
end;


function TIdSNTP.GetAdjustmentTime: TDateTime;
begin
  Result := FLocalClockOffset;
end;

function TIdSNTP.GetDateTime: TDateTime;
var
  NTPDataGram: TNTPGram;
  ResultString: string;
begin
  FillChar(NTPDataGram, SizeOf(NTPDataGram), 0);

  NTPDataGram.Head1 := $1B;
  DateTimeToNTP(Now, NTPDataGram.Xmit1, NTPDataGram.Xmit2);
  NTPDataGram.Xmit1 := Flip(NTPDataGram.Xmit1);
  NTPDataGram.Xmit2 := Flip(NTPDataGram.Xmit2);
  SetLength(ResultString, SizeOf(NTPDataGram));

  Move(NTPDataGram, ResultString[1], SizeOf(NTPDataGram));
  BufferSize := SizeOf(NTPDataGram);
  Send(ResultString);
  ResultString := ReceiveString;

  // DS default result is an empty TDateTime value
  Result := 0.0;

  // DS response may contain optional NTP authentication scheme info not in NTPGram
  if Length(ResultString) >= SizeOf(NTPDataGram) then
  begin
    FDestinationTimeStamp := Now ;

    // DS copy result data back into NTPDataGram
    // DS ignore optional NTP authentication scheme info in response
    Move(ResultString[1], NTPDataGram, SizeOf(NTPDataGram));

    FOriginateTimeStamp := NTPToDateTime(Flip(NTPDataGram.Org1), Flip(NTPDataGram.Org2));
    FReceiveTimestamp := NTPToDateTime(Flip(NTPDataGram.Rcv1), Flip(NTPDataGram.Rcv2));
    FTransmitTimestamp := NTPToDateTime(Flip(NTPDataGram.Xmit1), Flip(NTPDataGram.Xmit2));

    // corrected as per RFC 2030 errata
    FRoundTripDelay := (FDestinationTimestamp - FOriginateTimestamp) -
      (FTransmitTimestamp - FReceiveTimestamp);

    FLocalClockOffset := ((FReceiveTimestamp - FOriginateTimestamp) +
      (FTransmitTimestamp - FDestinationTimestamp)) / 2;

    // DS update date/time when NTP datagram is not ignored
    if not Disregard(NTPDataGram) then
    begin
      Result := NTPToDateTime(Flip(NTPDataGram.Xmit1), Flip(NTPDataGram.Xmit2));
    end;
  end;
end;

function TIdSNTP.SyncTime: Boolean;
begin
  Result := DateTime <> 0.0;

  if Result then
  begin
    Result := SetLocalTime(FOriginateTimestamp + FLocalClockOffset + FRoundTripDelay);
  end;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美丝袜丝交足nylons| 欧美巨大另类极品videosbest | 久久精工是国产品牌吗| 成人午夜激情片| 欧美日韩成人综合在线一区二区| 久久综合国产精品| 亚洲国产精品欧美一二99| 福利视频网站一区二区三区| 欧美视频一区在线观看| 国产欧美日韩视频一区二区| 日韩av高清在线观看| 91捆绑美女网站| 久久久亚洲午夜电影| 视频一区中文字幕国产| 99九九99九九九视频精品| 欧美videofree性高清杂交| 一级中文字幕一区二区| 成人动漫一区二区三区| 久久久久综合网| 麻豆精品一区二区av白丝在线| 在线观看日韩毛片| 最新不卡av在线| 成人激情免费电影网址| 久久免费视频一区| 精品一区二区免费在线观看| 91精品久久久久久久99蜜桃| 亚洲国产成人91porn| 色综合天天天天做夜夜夜夜做| 久久精品一区二区三区不卡| 激情图片小说一区| 欧美成人精品二区三区99精品| 亚洲超碰97人人做人人爱| 欧美综合视频在线观看| 夜夜夜精品看看| 91精品1区2区| 亚洲成人动漫精品| 欧美理论电影在线| 日韩国产欧美三级| 日韩欧美国产精品一区| 玖玖九九国产精品| 日韩欧美精品三级| 精品无人码麻豆乱码1区2区| 2020日本不卡一区二区视频| 韩国精品一区二区| 欧美国产乱子伦 | 香蕉加勒比综合久久| 欧美日韩精品三区| 免费av成人在线| 337p粉嫩大胆噜噜噜噜噜91av| 韩国在线一区二区| 中文字幕一区二区在线观看| 91视频免费观看| 亚洲成av人片在线| 欧美岛国在线观看| 国产+成+人+亚洲欧洲自线| 国产精品视频一区二区三区不卡| 99re这里只有精品6| 亚洲二区在线视频| 久久久久久免费| 99国产精品视频免费观看| 亚洲成av人影院| 久久综合给合久久狠狠狠97色69| 成+人+亚洲+综合天堂| 亚洲最大色网站| 欧美成人激情免费网| 99久久婷婷国产精品综合| 亚洲午夜免费福利视频| 久久午夜色播影院免费高清| 91色视频在线| 蜜桃av噜噜一区二区三区小说| 久久久久九九视频| 成人av资源在线| 亚洲欧美日韩精品久久久久| 91精品麻豆日日躁夜夜躁| 国内不卡的二区三区中文字幕| 欧美一区二区三区色| 九一久久久久久| 亚洲三级在线免费| 8x8x8国产精品| 国产成人亚洲综合a∨婷婷图片| 夜色激情一区二区| 精品国精品国产尤物美女| 中文字幕国产一区二区| 久久综合久久综合久久| 婷婷综合久久一区二区三区| av电影在线观看一区| 黄色小说综合网站| 日韩国产欧美一区二区三区| 日本在线不卡视频| 午夜久久电影网| 亚洲二区在线视频| 一区二区三区免费看视频| 亚洲人成7777| 一区二区三区在线不卡| 亚洲丝袜制服诱惑| 久久天堂av综合合色蜜桃网| 欧美极品美女视频| 欧美激情一区二区三区在线| 国产香蕉久久精品综合网| 久久午夜羞羞影院免费观看| 久久综合成人精品亚洲另类欧美| 免费久久精品视频| 欧美性色黄大片| 国产精品一区在线| 成人精品gif动图一区| 欧美日韩国产综合一区二区| 91豆麻精品91久久久久久| 国产电影一区二区三区| 成人午夜免费视频| 色哟哟国产精品免费观看| 色综合久久综合| 日韩欧美在线123| 精品国产免费久久| 国产精品欧美精品| 亚洲男女一区二区三区| 午夜精品爽啪视频| 蜜臀av亚洲一区中文字幕| 国内精品久久久久影院薰衣草| 成人黄色在线看| 欧洲在线/亚洲| 51精品久久久久久久蜜臀| 26uuu精品一区二区| 欧美国产日韩一二三区| 亚洲制服丝袜一区| 美腿丝袜在线亚洲一区| 日本欧美在线看| 国产成人精品www牛牛影视| 国产一区在线观看视频| 成人av动漫网站| 日韩欧美一区二区三区在线| 国产日韩精品一区| 一区二区三区在线免费观看| 亚洲激情中文1区| 欧美精品一区二区三区视频| 亚洲精品一区二区在线观看| 久久久久久久久蜜桃| 国产午夜精品一区二区| 国产亚洲一区字幕| 欧美国产精品一区二区三区| 国产视频一区二区在线观看| 国产亚洲精品超碰| 2017欧美狠狠色| 亚洲日本va午夜在线电影| 一区二区三区在线免费观看| 一区二区三区精密机械公司| 亚洲国产sm捆绑调教视频| 亚洲国产欧美一区二区三区丁香婷| 一二三区精品福利视频| 亚洲色图制服丝袜| 日产国产欧美视频一区精品| 久久激情五月婷婷| 国产精品亚洲第一区在线暖暖韩国| 国产老妇另类xxxxx| 日韩影院在线观看| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲精品高清视频在线观看| 丝袜a∨在线一区二区三区不卡| 免费观看成人鲁鲁鲁鲁鲁视频| 国产一区二区中文字幕| 91女人视频在线观看| 欧美精品色一区二区三区| 7777精品伊人久久久大香线蕉完整版| 久久综合久久综合九色| 亚洲欧美视频在线观看视频| 日产国产高清一区二区三区| 国产精品一级在线| 在线国产电影不卡| 欧美日韩不卡一区二区| 欧美日韩mp4| 国产精品丝袜黑色高跟| 亚洲1区2区3区4区| 日韩av午夜在线观看| 岛国精品在线播放| 欧美日韩国产a| 欧美国产精品中文字幕| 中文字幕中文乱码欧美一区二区| 亚洲1区2区3区视频| 国产白丝网站精品污在线入口| 色综合一个色综合亚洲| 日韩午夜激情视频| 国产精品视频一二| 麻豆91精品91久久久的内涵| av电影在线不卡| 91精品国产综合久久久蜜臀粉嫩| 国产亲近乱来精品视频 | 极品少妇一区二区| 99久久免费视频.com| 91久久免费观看| 亚洲男人电影天堂| 国产成人自拍网| 欧美一区二区三区四区五区 | 欧美一级欧美三级| 欧美国产在线观看| 久久精品国产亚洲a| 欧美午夜影院一区| 中文字幕在线观看一区二区| 国产在线播放一区三区四| 欧美色图在线观看| 中文字幕一区免费在线观看| 免费欧美在线视频|