TClientSocket получить время от NTP
Вопросик такого плана, как можно через TClientSocket получить от NTP сервера время?
Код:
double c;
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ClientSocket1->Host="ntps1-0.uni-erlangen.de";
ClientSocket1->Port=37;
ClientSocket1->Open();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ClientSocket1Read(TObject *Sender, TCustomWinSocket *Socket)
{
Socket->ReceiveBuf(&c,sizeof(c));
c = htonl(c);
TDateTime d =(int) c /(24*60*60)+2;
AnsiString s = FormatDateTime("dd.mm.yyyy hh:nn:ss",d);
Memo1->Lines->Add(s);
ClientSocket1->Close();
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ClientSocket1->Host="ntps1-0.uni-erlangen.de";
ClientSocket1->Port=37;
ClientSocket1->Open();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ClientSocket1Read(TObject *Sender, TCustomWinSocket *Socket)
{
Socket->ReceiveBuf(&c,sizeof(c));
c = htonl(c);
TDateTime d =(int) c /(24*60*60)+2;
AnsiString s = FormatDateTime("dd.mm.yyyy hh:nn:ss",d);
Memo1->Lines->Add(s);
ClientSocket1->Close();
}
Ответ каждый раз разным приходит.... И на время не очень то смахивает... Компоненты Инди так же не работают, пробовал на разных NTP серверах, с разными портами... (37,123)
А у меня TIdTime работает... На приведенном вами сервере...
А пример с TIdTime можешь сделать?
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//ntps1-0.uni-erlangen.de
IdTime1->Host = "ntps1-0.uni-erlangen.de";
TDateTime CurrTime = IdTime1->DateTime;
Memo1->Lines->Add(CurrTime.DateTimeString());
IdTime1->Disconnect();
}
{
//ntps1-0.uni-erlangen.de
IdTime1->Host = "ntps1-0.uni-erlangen.de";
TDateTime CurrTime = IdTime1->DateTime;
Memo1->Lines->Add(CurrTime.DateTimeString());
IdTime1->Disconnect();
}
Обработки исключений тут нет)
Код:
::Disconnect() ?