الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف يمكن الحصول على التارخ من الأنترنت

مغلق
بدأه sharp7 في 17 أبريل 2003 · 16 رد · 1,529 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

سلام

ارغب بكتابة احد البرامج التي تعتمد بشكل كبير على الوقت و التاريخ الحالي...وبحكم انه ممكن التحايل بسهول على تاريخ ووقت الجهاز ;) فهل هناك طريقة للحصول على والوقت و التاريخ الحالي عن طريق الأنترنت :rolleyes:

عندها يصبح من الصعب التحايل على البرنامج :D

(clock)

#2

استفد من بروتوكول Daytime

اظن مجموعة Indy تحتوي علي مكون TIdDayTime

وهناك في الانترنت ابحث عن مكون NetTime

#4

تفضل أخي

uses idGlobal, idDayTime, IdTime; 


function GetTimeFromInternet: TDateTime; 
var idDayTime : TidDayTime; 
    UTCTime : TDateTime; 
begin 
  Try 
    idDayTime := TidDayTime.Create (NIL); 
    Try 
      idDayTime.Host := 'time.nist.gov'; 
      Result := UTCSTringToDateTime (idDayTime.DayTimeStr); 
    Except 
      Result := 0; 
    end; 
  Finally 
    Try 
      idDayTime.Disconnect; 
      idDayTime.Free; 
    Except 
    end; 
  end; 
end;
d4baa0.gif
#7

الرد من موقع NiST يكون من الشكل:

53133 05-10-08 10:10:10 50 0 0 473.7 UTC(NIST)

يمكن أخذ التاريخ فقط أو الالدقائق فقط أو أي شيئ

بالنسبة UTCSTringToDateTime، أسف لقد نسيتها

Function UTCStringToDateTime(DayTimeString : String) : TDataTime;
Var
  i:Integer;
Begin
  i := Pos(' ',DayTimeString );
  If i > 0 Then 
    Result := StrToDateTime(Copy(DayTimeString ,i+1,17),'yy-mm-dd hh:mm:ss')+TimeZoneBias;
  Else
    Result := StrToDateTime(Copy(DayTimeString ,1,17),'yy-mm-dd hh:mm:ss')+TimeZoneBias;
End;
d4baa0.gif
#8

شكرا لك على الدالة

المهم لم يعمل لدي الكود و حاولت التعديل علية كلاتي:

Function UTCStringToDateTime(DayTimeString : String) : TDateTime;
Var
 i:Integer;
 fs : TFormatSettings;
Begin
fs.ShortDateFormat := 'yy-mm-dd';
fs.ShortTimeFormat := 'hh:mm:ss';
 i := Pos(' ',DayTimeString );
 If i > 0 Then
   Result := StrToDateTime(Copy(DayTimeString ,i+1,17),fs)+TimeZoneBias
 Else
   Result := StrToDateTime(Copy(DayTimeString ,1,17),fs)+TimeZoneBias;
End;

عمل البرنامج و لكن حصل لي استثناء مفاده انه لم يستطع ايجاد الكمبيوتر المضيف (time.nist.gov)

Socket Error # 11001 Host not Found

لا ادري هل هناك خطا في اسم ال Host ام ان الخطأ في رقم البورت !!!!!!!

#9

بالمناسبة حاولت عمل Ping من امام الجدارالناري Infront of Firewall فحصلت على استجابة وهذا يعني ان الفايروول منع الاتصال.

المهم اخذت البرنامج وشغلته فعمل ويبدو انه عمل اتصار و لكن حصلت على تاريخ خطأ 30/12/1899 هذا الرقم هو الرقم الافتراضي ل TDateTime اذا لم تتم تهيئته وهذا معناه وجود خطأ ما اي ان السيرفر لم يجيب

#10

الجدار الناري يمنع الإتصال

أكتب الأمر التالي لكي تري إجابة السيفر

Telnet time-a.nist.gov 13

وسترى بنفسك الناتج و به تاريخ اليوم و الساعة

d4baa0.gif
#11

بالفعل ظهرت النتائج بأستخدام TelNet

ولكن بأستخدتم الدلفي احصل على صفر اي هذا ما يتم تنفيده

Except

Result := 0;

هذا موقع وجدته لديه عدة سيرفرات

http://tf.nist.gov/service/time-servers.html

ولكن لم اعرف قيم البورت لكل سيرفر

#12

البورت مكتوب فوق :D

13

d4baa0.gif
#13

اموت وعرف فين وجدته بالضبط :s

المهم جربت الكود التالي في حدث زر

IdDayTime.Connect;
ShowMessage(IdDayTime.DayTimeStr);
IdDayTime.Disconnect;

وقد عمل بشكل رائع  :D

ولكن عندما اجرب الكود اعلاه لا يعمل لابد ان هناك سبب في الدالة  UTCSTringToDateTime بعد التغيرات التي عملتها انا  <_<

بالناسبة في الدالة GetTimeFromInternet لابدا ان اضيف لها الكود التالي

idDayTime.Host := 'time.nist.gov';
idDayTime.Connect;

ولكن رغم هذا لم يعمل

على العموم انا تعبت إن شاء الله بكرة نكمل

تحياتي لك DeltaAziz

تم تعديل هذه المشاركة بواسطة Whale في 8 أكتوبر 2005 في 16:44

#14

يمكن بطريقة أخري

ضع مكون ClientSocket و مكون Memo و زر Button

في حدث OnRead المكون Clientsocket أكتب:

Memo1.Lines.Add(Socket.ReceiveText);

ولا تنسى خصائص نفس المكون

في Host أكتب رقم IP الموقع مثلا 129.6.15.29

و البورت 13

إضغط على الزر و كتب

ClientSocket1.Open;

إن كنت متصل بالنت، وضغطت الزر تحصل على

اقتباس
53651 05-10-08 14:38:15 23 0 0  0.0 UTC(NIST) *

05-10-08 هو تاريخ اليوم

d4baa0.gif
#15

واخيرا عمل البرنامج بنجاح :D

مشكووور و ما قصرت

اه في مشكلة واحده فقط الان :( وهو ان الوقت الذي احصل عليه لايطابق الوقت المحلي ولا حتى توقيت جرينتش.

فهل لكل سيرفر وقت خاص اي يرسل الوق بالتوقيت المحلى ام جميعها ترسل بتوقيت جرينتش

تحياتي

#16

الوقت ليس مشكلة، قم بتعديله

مثلا في بلدي التوقيت Gmt+1 يكفي إضافة واحد للساعة مع مراعات التغيير

d4baa0.gif
#17

الان عملت بشكل صحيح بعد ان حدفت TimeZoneBias واضفت ثلاث ساعات

وبهذا نكون قد انهينا الموضوع بحمد لله

تحياتي لك

هذا الموضوع مغلق.

مواضيع مشابهة