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

دروس Ftp / Smtp /client-server /http/..كلها مع Indy

بدأه tahasit في 1 يوليو 2009 · 11 رد · 7,704 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكــم ورحمـة الله وبركاتــه ،،

نبدأ على بركة الله بمقدمة عن Internet direct أو ما يعرف إختصارا بـ Indy :

ماهي Indy :

هي إختصار للكلمة Internet direct (أنترنت موجه أو مباشر ) وهي مجموعة من مكونات

مفتوحة المصدرمبنية على لغة Object Pascal تستخدم لبناء وتطويرالتطبيقات التي تعتمد على بروتوكولات

الإنترنت الشائعة وكل ما له علاقة بالشبكات .

Indy - هي مكتبة تطوير متعددة المجاري ('Multi threading) تعتمد على Blocking Socets ( إذا نجح

الإتصال يحدث ما يعرف بـ Return وإذا لم ينجح يحدث إستثناء) وهي متاحة ومدعومة في كل اللغات التالية :

Borland delphi - Borland C++ Builder لنظام ويندوز و Borland Kylix لنظام لنيكس

تحتوي Indy على Clients , Servers , TCP , UDP , Raw Sockets و أكثر من 100 بروتوكول , منها

SMTP , HTTP , POP3 , NNTP . أيضاً Indy تدعم OpenSSL و Zlib في بروتوكولاتها .

إصدار Indy 10 ينفذ إلى Free Pascal ويعمل على Windows , Linux , FreeBSD, Darwin

Indy متوفر لـBorland Delphi و C++ Builder و Kylix أيضاً .

Indy مرخص تحت رخصة indy modified BSD Licence و indy MPL Licence .

وفي بداية عام 2008 , بدأ مشروع اسمه # Indy لكتابة Indy في# C .

ومن أمثلة إستخداماتها الأكثر شيوعا البرمجيات من نوع ( مخدم-زبون)

وقد تم إضافتها على شريط أدوات دلفي بداية من النسخة السادسة ، وفي النسخة السابعة من دلفي فاق عدد عناصرها

مائة (100)عنصريمكن أن نصنفها كما يلي :

عناصر الزبون (Client)

عناصر المخدم (Server)

عناصر دعم وتحكم إضافية ومتفرقات

post-145519-1246459779_thumb.png

صورة عناصرIndy ضمن شريط أدوات دلفي 7

ولعل أهم ما يميز مكونات Indy هو جمعها بين القوة وسهولة الإستخدام ويتلخص ذلك فيما يلي :

- شفرة Indy مفتوحة المصدر بمعنى توفر إمكانية الإظطلاع عليها والتعلم منها والتعديل فيها

Indy - تدعم منصات متعددة (Cross-platform) بمعنى نفس الشفرة تعمل على لينكس وويندوزوNet

Indy - تغلف عملية الإتصال : تقوم إندي بتغليف عمليات الإتصال وإجراءات البروتوكولات مما يسهل مهمة

المبرمج

- تدعم Indy ما يسمى Multibyte character sets وهذه ميزة مهمة للتطبيقات غير الناطقة بالإنكليزية أي أنك

تستطيع إرسال محارف آسكي بالغة العربية مثلا أو اليابانية ....

- تدعم Indy الطيف الأوسع من بروتوكولات الأنترنت : بما فيها الأساسية مثل : UBD و TCP والبروتوكولات

الأبناء مثل : SMPT-POP-TELNET-COPHER-ECHO وغيرها وربما لا نبالغ إذا قلنا أنها تدعم كل

بروتوكولات الإنترنت المشهورة اليوم التي تعود للأب IP وهذا يعني أنك لن تحتاج أدوات أخرى غيرها عند تطوير

برامجك .

كما قلنا سابقا Indy مبنية على تقنية المجاري المتعددة 'Multi threading وهي ميزة لا تقدر بثمن للتطبيقات

المتقدمة وتوفر أداء مستقر وتقلص مشاكل Frezzing' ' المرتبطة بالتطبيقات الشبكية.مما يعني أن المخدمات المنشأة

بواسطة عناصر Indy تستطيع التعامل مع عدد كبير من الزبائن في نفس الوقت.

- تدعم Indy ما يسمى بـ Thrad pooling أي أنها لا تحفظ مجرى محدد لكل زبون يشغله طول الوقت سواء كان

متصل أم لا ، بل تتم عملية تحرير المجاري بصورة ديناميكية ، وطالما الزبون لا يستخدم المجرى يتم إستثماره مع

زبون آخر، وهذه تعتبر إدارة حكيمة للذاكرة وإحدى مميزات Indy

Indy - مبنية على إستدعاءات المقابس المتراصة Bloking sokets calls ، الإستدعاء المتراص إن جاز التعبير يتم

بشكل مشابه لإستدعاءات توابع الباسكال مما يوفر مرونة بالغة ، حيث تتم كتابة الشفرة سطر سطرا وتتولى اندي

تحرير نفس المقطع البرمجي عدة مرات في الذاكرة من أجل كل زبون متصل على حدة دون إرباك المبرمج بذلك.

تاريخ Indy :

في بداية الأمر , كانت Indy تسمى Winshoes وكتبها Chad Z. Hower من خلال

Visual Basic عام 1993 .

انتقلت إلى دلفي عام 1995 .

تم إدخالها تحت رخصة المصادر المفتوحة عام 1997 .

في عام 2000 ، Winshoes أصبحت Cross-Platform , وتم تغيير اسمها ليصبح

Internet Direct Indy

أضفاتها Borland مع Borland Delphi و C++ Builder و Kylix عام 2001 .

في 2003 أضيفت Indy إلى Delphi.NET , وتم توفيرها لمنصة .NET

تم تعديل هذه المشاركة بواسطة tahasit في 1 يوليو 2009 في 18:36

986902102.jpg
#2

نبدأ الآن بتعريف أهم المكونات في Indy أو أكثرها إستعمالا ولكن قبل ذلك لا بد لنا أن نعرج على أهم البروتوكولات التي تتعامل معها مكتبة عناصر indy :

-- مامعنى كلمة بروتوكول : هو الشيء المتعارف علية و المحكوم بقوانين و قواعد معينة.

-- بروتوكول نقل الملفات FTP (File Transfer Protocol) هو بروتوكول خاص بنقل الملفات الكبيرة نسبيا بطريقة سريعة بين أجهزة الكمبيوترالبعيدة ( client- server ) والموجودة في شبكة تستخدم بروتوكول (TCP/IP) مثل شبكة الأنترنت .

-- بروتوكول نقل النص المترابط – التشعبي HTTP (Hypertext Transfer Protocol) : هو بروتوكول نقل النص المترابط (ملفات ذات محتوى متعدد الوسائط –Multimedia ) ويتشابه مع بروتوكول نقل الملفات FTP من الأجهزة الخادمة البعيدة (remote servers) ولكنهما يختلفان في أن بروتوكول نقل النص المترابط (HTTP) يستخدم المستعرض (Web browser) لعرض الملفات المنقولة من الخادم (Server) على شاشة المستخدم (Client) لتأخذ في النهاية شكل صفحات الويب التي نعرفها بينما بروتوكول نقل الملفات FTPيخزن الملفات المنقولة في القرص الصلب لجهاز المستخدم.

-- بروتوكول السيطرة – التحكم في الإرسال TCP/IP(Internet Protocol /Transmission Control Protocol) : يعتبر بروتوكول TCP/IP من أهم البروتوكولات الموجوده من أجل التخاطب في الشبكات و يعتبر الان لغة التخاطب الوحيده في الانترنت و يوجد العديد من لغات التخاطب ما بين العتاد و المعدات في الشبكه الواحده و لكن الـ TCP/IP يعتبر البروتوكول الرئيسي و بذلك لغة التخاطب هذه هي اللغه الافضل و الأكثر شيوعاً في العالم و من مميزاتها أنها ممكن أن تعمل مع أي بروتوكول آخرو بروتكول الـ TCP/IP هو المسؤول عن الـ IP Address و هو يمثل عنوان مرسل و مستقبل الإتصال على الشبكة.

-- العملاء (Client) : نطلق هذه التسمية بعد أن تتم عملية الإتصال بين العميل والخادم (Server) ونستطيع تشبيه هذه العملية بالمكالمة الهاتفية حيث أن العميل هنا هو الشخص الذي يقوم بالإتصال.

-- الخادم (Server) : هو الذي يجيب على الطلبات القادمة من العملاء ويقوم الخادم بمعالجة العديد من الطلبات لأكثر من زبون في نفس الوقت وبشكل آني مثل المكالمة الهاتفية فأنت عندما تجري إتصال هاتفي وكان الهاتف في الطرف الثاني معطل يجيبك خادم شبكة الهاتف فورا بوجود عطل .

-- عنوان IP (IP Address) : كل حاسوب موجود على الشبكة التي تعمل تحت نظام السيطرة على الإرسال (TCP/IP) يملك عنوان IP وهو من الشكل 192.168.0.1 وقد ترتبط مجموعة من عناوين IP بعنوان IP واحد .

وهناك العديد من البروتوكولات الأخرى التي تتعامل معها INDY لكن نكتفي بهذا القدرلنبدأ الآن بطرح بعض الأمثلة عن كيفية إستخدام عناصر indy في برامجنا.

تم تعديل هذه المشاركة بواسطة tahasit في 6 يوليو 2009 في 18:14

986902102.jpg
#3

نبدأ الآن مع أول برنامج لنا نستعمل فيه مكتبة العناصر Indy - سيكون برنامج يستعمل بروتوكولFTP لرفع وتنزيل الملفات من موقعك(Server) من أجل ذلك سنستعمل العناصر التالية من مكتبة العناصر INDY :

-- IdFTP : يتعامل هذا المكون مع بروتوكول نقل الملفات FTP الذي هو جزء أساسي من نظام تبادل الملفات لتحميل وتنزيل الملفات ، وكذلك في إدارة الملفات والأدلة ، كما ذكرنا سابقا بروتوكول نقل الملفات بروتوكول شائع لتوزيع البرمجيات ، وتحميل الملفات على خادم الشبكة ، وتوفير المحفوظات لأغراض مختلفة، كما أن هذا العنصر يحتوي على كل الأقسام والأنواع والإجراءات والوظائف اللازمة لتعريف وتنفيذ FTP صنف عميل .

-- IdAntiFreeze : يعمل Indy على ما يعرف بـ blocking model يعني إذا أنت مثلا أدخلت عنوان خادم ما وبمجرد ضغطك على زر الإتصال يبدأ عمل هذا العنصر حيث أن دور هذا العنصر هو تجميد العمليات الأخرى حتى يتم الحصول على جواب لعملية الإتصال الأولى ، وتبقى العمليات الأخرى في حالة إستثناء مرفوع (معلقة) ويتولى Tidantifreezebase تقرير إذا كان هناك حالات أخرى خلقت أثناء عملية الإتصال هذا يعني أن عنصر واحد فقط من هذا المكون يمكن أن يكون نشيط في نفس التطبيق ويستعمل هذا المكون مايعرف بـ : global variable GAntiFreeze .

-- IdLogEvent : هذا العنصر سليل Tidlogbase ويكمن دوره في الإخطاروالتبليغ بالمدخلات والمخرجات وأي تغير في الوضع كما يقوم بنشر أحداث المقابض الخاصة بإستقبال وإرسال البيانات (Data) والتبليغ عن حالة الإتصال (notifications in the socket connection state) .

وسنحتاج أيضا إلى المكونات التالية من مكتبة العناصر في دلفي :

-OpenDialog

-SaveDialog

-HeaderControl

-ProgressBar

-PopupMenu

-DirectoryListBox

-DebugListBox

-CheckBox1

بالإضافة لـ Button و Editو نقوم بتصميم واجهة البرنامج كالتالي :

post-145519-1247130299_thumb.png

تجدون في المرفقات برنامج FTP كامل تستطيعون من خلاله تنزيل وتحميل الملفات من الخادم SERVER

من خلال هذا المثال البسيط الذي يستخدم ثلاث عناصر INDY يتضح لنا مدى سهولة التعامل مع مكتبة العناصر INDY لإنشاء تطبيقات بمواصفات عالية وسهولة بالغة

FTP.rar

تم تعديل هذه المشاركة بواسطة tahasit في 9 يوليو 2009 في 13:03

986902102.jpg
#4

السلام عليكــم ورحمـة الله وبركاتــه ،،

نتكلم في هذا الدرس عن Tidhttp

Tidhttp : هو سليل Tidcustomhttp

يتعامل هذا المكون من مكتبة العناصر في indy مع بروتوكول http وكما قلنا سابقا بروتوكول http مسؤول عن عرض الملفات ذات الوسائط المتعددة من خلال مستعرض الويب ، ويقوم Tidhttp بنشر ما يعرف بـ handlers المتعلقة بالأحداث والخصائص على الأصناف الآباء للسماح بالدخول من خلال تطبيق الزبون.، كما أن Tidhttp يوفر الدعم لكل من http v1.0 و http v1.1

هذا المثال سوف يوضح مبدأعمل هذا المكون

نقوم بفتح مشروع جديد ونضع العناصر التالية من مكتبة العناصر في دلفي :

post-145519-1247654387_thumb.png

في هذا المثال سوف نقوم بإنشاء برنامج لتحميل الملفات من خلال إدخال عنون URL يدويا طبعا هذا العنوان سوف يكون رابط تحميل ملف ما

مثال ://attachment/88986

من خلال هذا المثال يتضح لنا كيف يمكن لنا أن نتعامل مع بوتوكول HTTP من خلال INDY

نبدأ على بركة الله:

نقوم بتحديد Tidhttp ومن محرر الخواص نختار قائمة الأحداث وفي الخانة onAuthorization من أجل الإنتقال إلى محرر الأكواد ونكتب ما يلي :

procedure TForm1.IdHTTP1Authorization(Sender: TObject;
Authentication: TIdAuthentication; var Handled: Boolean);
begin
showmessage('ERROR');
end;

ثم في خانة onWork نكتب مايلي:

procedure TForm1.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
begin
if AWorkMode = wmRead then
begin
ProgressBar1.Position := AWorkCount ;
Label1.Caption := IntToStr(AWorkCount) + 'Bytes de :' + inttostr(ProgressBar1.Max) ;
end;

end;

ثم في خانة onWorkbegin نضغط مرتين ونكتب مايلي :

procedure TForm1.IdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer);
begin
if AWorkMode = wmRead then
begin
ProgressBar1.Max := AWorkCountMax ;
ProgressBar1.Position := 0 ;
end;

وفي خانة onWorkend نضغط مرتين ونكتب ما يلي :

procedure TForm1.IdHTTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
begin
if AWorkMode = wmRead then
Label1.Caption := 'Completed';
showmessage('Completed');
ProgressBar1.Position := 0 ; end;

إنتهينا الآن من العمل على عنصر IdHTTP1

ننتقل الآن إلى العنصر الذي قمنا بشرحه سابقا IdAntiFreeze1

نقوم بتغيير الخاصية Active لهذا العنصر من False إلى True فقط

ننتقل الآن إلى زر الحفظ :

نضغط مرتين على زر الحفظ ونكتب ما يلي :

procedure TForm1.Button2Click(Sender: TObject);
begin
SaveDialog1.Execute;
edit2.Text:=SaveDialog1.FileName;
end;

ننتقل الآن إلى زر التحميل نضغط مرتين ونكتب ما يلي :

procedure TForm1.Button1Click(Sender: TObject);
var
F: TFileStream;
begin
try
idhttp1.Request.Username:=edit3.text;
idhttp1.Request.password:=edit4.text;
idhttp1.Request.BasicAuthentication:=true;
F := TFileStream.Create(edit2.text, fmCreate);
IdHTTP1.Get(edit1.text,F);
finally
F.Free;
end;
end;

وهذا رابط المثال : http:/index.php?showtopic=198691

ومن أجل إثراء الموضوع هذا مثال آخر عثرت عليه وأنا أتجول في النت وهو مثال رائع يستخدم نفس عناصر INDY التي سبق شرحها وإنما بأسلوب رائع

حيث أنه يمكنك تحميل أكثر من ملف في نفس الوقت ومن أكثر من عنوان واحدوهو شبيه ببرامج التحميل التي نعرفها

هذه صورة المثال الثاني :

post-145519-1247657976_thumb.png

تجدون المثال الثاني في المرفقات

HTTPMultiFileDownloader.zip

تم تعديل هذه المشاركة بواسطة Wael Dalloul في 16 أغسطس 2009 في 11:04

986902102.jpg
#5

هل توقفت الدروس هنا اخي tahasit

#6

لا يا أخي زكيرى لم تتوقف هنا ومازال الكثير مما ينبغي شرحه

وفي القريب العاجل جدا إن شاء الله

الذي شغلني عن إتمام الدرس هو أني أحضر لمذكرة التخرج تقني سامي في الإعلام اللآلي ولم أجد المؤسسة المناسبة لحد الآن

986902102.jpg
#7

الله معين

#8
زكيري عبد العالي كتب:
الله معين

كنت اريد ان اكتب طلب مساعدة عن موضوع ال ftp

الله يجزيكم الخير شكرا لكم جميعاً

#9

السلام عليكــم ورحمـة الله وبركاتــه ،،

أنا حملت المثال المتعلق بالاتصال ب الموقع و الاطلاع على مجلدات الموقع و ملفاته

بس المشكلة بالمثال عم يظهر التاريخ بالشكل 00:00 2005/12/01

اخدت المثال و حاولت تطبيقه بدون على دلفي 2007 لكن ظهر التاريخ على الشكل التالي Jan 12 2005 مع اني اعطيته الفورمات المطلوب

حتى حملت تطبيق أخر واعطيته فورمات لكن ظهر بنفس الاسلوب

و انا بحاجة لتاريخ الملف من أجل

هل من الممكن الحصول على تاريخ السيرفر بواسطة الدلفي ؟

#10

السلام عليكــم ورحمـة الله وبركاتــه ،،

المشكلة لدي انا لدي برنامج محاسبة و عن طريق برنامج المحاسبة في قائمة أرغب بوضع تحميل التحديث عن طريق زر مثلاً

عن الضغط قمت بتحصيل تاريهخ النسخة عن طريق fileAge الأن تبقى لدي الحصول على تاريخ التحديث النسخة المرفوعة عن الموقع استخدمت IDFTP لكن التاريخ اذا كان في غير عام

ظهر بالشكل Jan 12 2005

لكن اذا كان في نفس العام يظعر على الشكل لا يظهر العام يظهر الوقت عوضاً عنه

Sep 28 03:10

استخدمت فورمات للتاريخ لكن اعطاني خطأ

و جزاكم الله كل خير

#11

مشكور

#12

اخي helaly هل تعرف عنوان منفذ ال Lan

وشكراً

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