الفريق العربي للبرمجةأرشيف المنتديات · 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 واضفت ثلاث ساعات

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

تحياتي لك

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…