Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];

Вниз

Синхронизация времени   Найти похожие ветки 

 
GUEST   (2004-08-11 04:16) [0]

Как синхронизировать время с атомными часами через интернет?
Заранее благодарю.


 
TUser ©   (2004-08-11 05:12) [1]

Насчет атомных часов не знаю, но есть специальные сервера, с которых мжно узнать время. Атомные там часы стоят или песочные - это надо спросить у хозяина сервера. Поищи, может найдешь с атомными.


 
GUEST   (2004-08-11 05:27) [2]

Да атомные это так, забыл в кавычки взять :)
Как вообще организовать взаимодействие программы с этими серверами? как узнать время?


 
TUser ©   (2004-08-11 05:57) [3]

Я точно видел на DelphiWorld статью об этих серверах. Сейчас вот не могу ее найти, но она там точно есть. Поищи.


 
GUEST   (2004-08-11 08:40) [4]

ну можеть у кого примерчик есть, я тоже на сайт ене нашел...


 
REA ©   (2004-08-11 09:53) [5]

Вот, например TIdTime, TIdSNTP. Сам не пробовал.

Unit IdTime

Description
TIdTime is a client implementation of the Time Protocol as described in the Internet Standards document:

RFC 868 - Time Protocol (http://www.rfc-editor.org/rfc/rfc868.txt)

Time is a simple protocol for synchronizing time on a local network. For a time protocol with higher accuracy over several networks, use TIdSNTP. To retrieve the current date and time in human-readable form, use TIdDayTime.

Please note that the Time Protocol in its current form cannot handle most dates after the year 2035. This limitation is stated in RFC 868.


 
Мастер ©   (2004-08-11 12:05) [6]

procedure TForm1.Button1Click(Sender: TObject);
var
 iT: tIdTime;
 CurrTime: TDateTime;
 st: TSystemTime;
 YY,MM,DD,HH,NN,SS,MS: Word;
begin
 iT := tIdTime.Create(nil);
 iT.Host := "ntps1-0.uni-erlangen.de";
 CurrTime := iT.DateTime;
 iT.Free;
 GetLocalTime(st);
 DecodeDate(CurrTime,YY,MM,DD);
 DecodeTime(CurrTime,HH,NN,SS,MS);
 st.wYear := YY;
 st.wMonth := MM;
 st.wDay := DD;
 st.wHour := HH;
 st.wMinute := NN;
 st.wSecond := SS;
 st.wMilliseconds := MS;
 SetLocalTime(st);
end;


 
easy ©   (2004-08-11 14:22) [7]

unit frmMainU;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ScktComp, StdCtrls;

type
 TForm1 = class(TForm)
   Memo1: TMemo;
   Button1: TButton;
   ClientSocket1: TClientSocket;
   procedure Button1Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
   procedure ClientSocket1Connect(Sender: TObject;
     Socket: TCustomWinSocket);
   procedure ClientSocket1Disconnect(Sender: TObject;
     Socket: TCustomWinSocket);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

function ntohl(const value: cardinal): cardinal;
asm
 mov edx, eax
 mov ecx, eax
 shl ecx, 16
 and eax, $0000ff00
 or eax, ecx
 mov ecx, edx
 shl eax, 8
 and ecx, $00ff0000
 shr edx, 16
 or ecx, edx
 shr ecx, 8
 or eax, ecx
end;

function TimeZoneBias: Double;
var
 ATimeZone: TTimeZoneInformation;
begin
 if (GetTimeZoneInformation(ATimeZone) = TIME_ZONE_ID_DAYLIGHT) then
 begin
   result := ATimeZone.Bias + ATimeZone.DaylightBias;
 end
 else
 begin
   result := ATimeZone.Bias + ATimeZone.StandardBias;
 end;
 Result := Result / 1440;
end;

function SecsToTime(ASecs: Cardinal): TDateTime;
const
 SECS_PER_DAY = 24 * 60 * 60;
 UNIX_OFFSET = 25569;
begin
 Result := ntohl(ASecs) / SECS_PER_DAY + encodedate(1900, 1, 1) - TimeZoneBias;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Memo1.Clear;
 memo1.Lines.Add("Connecting to " + ClientSocket1.Host + "...");
 ClientSocket1.Open;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 ClientSocket1.Host := "time-A.timefreq.bldrdoc.gov";
 ClientSocket1.Port := 37;
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
 Socket: TCustomWinSocket);
var
 buf: Cardinal;
begin
 Socket.ReceiveBuf(buf, sizeof(buf));
 memo1.Lines.Add(#13#10 + "-----------------------");
 memo1.Lines.Add(formatdatetime("dd.mm.yyyy hh:nn:ss", SecsToTime(buf)));
 memo1.Lines.Add("-----------------------"#13#10);
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
 Socket: TCustomWinSocket);
begin
 memo1.Lines.Add("Connect");
end;

procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
 Socket: TCustomWinSocket);
begin
 memo1.Lines.Add("Disonnect");
end;

end.


 
Vit@ly ©   (2004-08-11 15:38) [8]

В посте не "заметил" слова Delphi
http://www.express-computing.com/files/download.com/ExpressTimeSync30.exe
Триальная версия на 30 дней



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.04 c
4-1095100166
MIGUR
2004-09-13 22:29
2004.10.17
Изменения параметров в BOIS


4-1094799173
nester
2004-09-10 10:52
2004.10.17
Как можно узнать когда закончила запускаться внешняя программа?


1-1096628936
Amid
2004-10-01 15:08
2004.10.17
Thread - как остановить поток ?


3-1095447651
eLimar
2004-09-17 23:00
2004.10.17
Производительность и способы коннекта


3-1095868683
SH
2004-09-22 19:58
2004.10.17
Исталляция клиент-серверного приложения с БД Interbase





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский