在德尔福获取网络时间

时间:2010-11-28 14:34:14

标签: delphi datetime indy

我想从互联网上获取时间和日期

我使用了以下代码

IdDayTime1.ReadTimeout := 5000;
IdDayTime1.Host := 'www.time.windows.com';
IdDayTime1.Port := 37     ;
Label1.Caption := IdDayTime1.DayTimeStr;

但我得到:套接字错误#11004

这是什么,我做错了什么

我的互联网和其他东西都没问题

5 个答案:

答案 0 :(得分:8)

DayTime 协议不是 NTP 协议。 DayTime 使用端口13,而不是37. 37由 Time 协议使用,该协议同样不是使用123(UDP)的NTP协议。我不知道time.windows.com是否支持 DayTime Time 协议,从现在可靠的时间源获取时间的最常用的协议是 { {3}} ,以及更简单的兄弟SNTP,它取代了DayTime和Time协议。

答案 1 :(得分:2)

套接字错误11004表示“错误地址”。您需要删除 www。前缀,正确的地址是 time.windows.com

答案 2 :(得分:1)

以下是一些显示idSNTP组件使用的简单代码

var
  SNTPClient: TIdSNTP;
begin
  SNTPClient := TIdSNTP.Create(nil);
  try
    SNTPClient.Host := 'pool.ntp.org';
    SNTPClient.SyncTime;
  finally
    SNTPClient.Free;
  end;
end;

答案 3 :(得分:1)

如果您获得时间和日期使用Indy IdSNTP组件并设置: host: time.windows.com

并在事件Timer1Timer(TTimer组件)上写:

Label1.Caption := DateToStr(IdSNTP1.DateTime)
   + ' - ' + TimeToStr(IdSNTP1.DateTime);
Label2.Caption := IdSNTP1.Host;

您在表单上看到(labe1,label2)现在日期和现在时间。因此,如果您设置时间同步 将IdSNTP1.SyncTime;放入事件Timer1Timer。

答案 4 :(得分:0)

尝试将Indy ntp客户端组件与ntp pool.org服务器一起使用。如果您遇到任何问题,我会发布一些示例代码。