يتصفح المنتدى الآن:
1 زائر
دورة في برمجة تطبيقات مخدم-زبون باستخدام Indy |
||
|---|---|---|
|
مدير الموقع
![]()
مشترك منذ:
2005/2/13 15:07 من Syria
الردود:
1192
![]() |
دورة في برمجة تطبيقات الشبكة من نوع مخدم-زبون
الدرس الأول : تعاريف قبل البدء بالجانب التطبيقي لابد من لمحة بسيطة عن مجموعة أمور ستلزمنا في كل برامج الشبكات لاحقا .. ماهو عنوان IP (the ip address ) : عند وصل مجموعة من الأجهزة على شبكة , فإننا نحتاج لتمييز كل جهاز عن الآخر بعنوان محدد , هذا العنوان يطلق عليه ip address , وهو رقم يميز الجهاز في الشبكة كما يميز رقم الهاتف كل مشترك في المقسم .. لرقم الip هذا أهمية كبيرة في عالم الشبكات لإن أي عملية اتصال بين الأجهزة تتم باستخدام هذا الرقم فمثلا نعبر عن عملية ارسال بيانات من جاهز لآخر بالشكل : الجهاز ذو الرقم xxx.xxx.xxx.xxx يرسل بيانات إلى الجهاز ذو الرقم xxx.xxx.xxx.xxx يتألف عنوان IP من 4 أجزاء مفصولة بنقطة , كل جزء يحوي رقم يأخذ قيمة بين 1 و 255 , مثلا : 131.107.2.200 ظهور DNS : نظرا لصعوبة التعامل مع أرقام ip الطويلة , ظهرت الحاجة لاستخدام اسماء سهلة ومعبرة بدلا من الأرقام التي يستحيل التعامل معها .. تخيل أنك مثلا على شبكة الإنترنت إذا اردت ان تفتح موقع orwah.net يجب أن تكتب بدل ذلك رقم معقد وطويل , مثلا : 69.72.168.138 حيث يلزمنا لاستدعاء أي جهاز استخدام رقم ip الخاص به وهذا موضوع شاق نظرا للطبيعة الإنسانية التي تجد أنه من الأسهل حفظ أسماء معبرة وذات معنى بدلا من أرقام غير مترابطه ومتشابها فيما بينها .. لذلك ظهرت فكرة مخدمات الDNS والتي هي خدمة بسيطة تسمح للإنسان باستخدام الاسماء بدلا من الأرقام , بحيث يتم تخزين جدول يحوي كل أسم وما هو رقم ip الذي يقابلة . فعندما تدخل على شبكة الإنترنت وتطلب orwah.net يتم تحويل طلبك إلى مخدم DNS يبحث عن رقم الIP المقابل ل orwah.net ويحول طلبك إلى الجهاز الذي يحمل هذا الرقم (وهو المخدم الذي يستضيف موقع عروة نت , وقد اسميتة التنين أو dragon ونستضيف عليه مجموعة مواقع أخرى كثيرة وهذا يعني أن رقم الip ليس خاص بموقع ولكنه خاص بجهاز , وعمليا يمكن أن يكون رقم ip واحد متعلق بمجموعة من الاجهزة معا ولكن يتم التعرف عليها من وجهة نظر الشبكة أنها عنوان وحيد) .. يسمى الإسم الذي نستعيض به عن الرقم ب الوكيل أو المضيف أو Host . الخلاصة : أصبح لدينا مفهومين مهمين هما عنوان ip جهاز ما : Ip address مضيف جهاز ما : Host name وهذين المفهومين يقومان بنفس العمل وهو تحديد الجهاز الذي نريد التعامل معه على شبكة ولكن احدهما أسهل للتعامل من الآخر (Host name الذي تقدمة خدمة DNS ) في حين ان الاتصال داخليا على الشبكة يتم كلة باستخدام رقم الip .. المفهوم الثالث المهم هو مفهوم المنفذ Port : حيث يتم تقسيم خط ارسال واستقبال البيانات على منافذ افتراضية , المنفذ هو فقط رقم افتراضي وليس له أي وجود مادي .. اثناء برمجة منظومة شبكية ما , يتم تحديد رقم منفذ واحد لبرنامج الزبون ولبرنامج المخدم , أي أن القناة التي يرسل عليها البرنامج الأول هي نفسها التي يستقبل عليها الثاني وبالعكس .. لإرسال أي بيانات من جهاز لآخر يجب أولا تحديد رقم ip الجهاز أو عنوان Host name الخاص به ثانيا تحديد المنفذ المشترك الذي يتم علية الارسال د بعض ارقام هذه المنافذ محجوزة لبروتوكولات قياسية .مثلا : المنفذ 25 للبروتوكول SMTP الخاص بالبريد الالكتروني المنفذ 21 للبروتوكول FTP الخاص بتبادل الملفات المنفذ 23 للبروتوكول Telnet الخاص بالتحكم البعيد معمارية برامج مخدم-زبون يسميها البعض مزود-عميل أو مزود-زبون او Client-server أو أي شيء آخر .. تقوم معمارية المخدم-زبون بصورتها المجردة على بناء البرنامج ضمن وحدتين . وحدة الزبون Client : تتلخص مهمتها في إدارة التفاعل مع المستخدم , وارسال طلباته إلى الوحدة الثانية. وحدة المخدم Server : مهمتها هي القيام بعمليات المعالجة التي تطلبها وحدة الزبون . يمكن لبرنامجي الزبون-المخدم أن ينفذا على الحاسوب ذاتة ولكن غالبا ما ينفذان على حاسوبين مختلفين .. وعادة وفي معظم التطبيقات يوجد برنامج مخدم واحد , وعدد غير محدود من برنامج الزبون . على سبيل المثال نقوم بتصميم برنامج مخدم وبرنامج زبون للبريد الالكتروني , برنامج المخدم يتم تشغيله مرة واحدة على جهاز مخصص لإدارة البريد الالكتروني على الشبكة أما برنامج الزبون فيكون لدى كل مستخدم نسخة منه , وقد يقوم 100 مستخدم بالإتصال وطلب بريدهم الالكتروني من المخدم , وهم جميعا يستخدمون نفس البرنامج .. فعليا يقوم المخدم بتلقي طلبات الزبائن المتعددة ومعالجتها والرد عليها كل على حده وتقوم برامج الزبون بتولي عملية التواصل مع المستخدمين النهائيين للنظام . بهذه المقدمة النظرية البسيطة نستطيع الدخول الآن في الجزء البرمجي وكيفية كتابة تطبيقات مخدم-زبون . الدرس القادم يحوي حديث عن INDY وأساسيات برمجتها ويبدأ بمثال تأسيسي للإتصال بين المخدم-الزبون للتدريب الدرس الثالث يحوي تفاصيل وأمثلة عملية . وهنا أظن أننا سنتوقف إلا إذا وجدنا الحاجة للمزيد من الاستفاضة ووجد وقت كافي لها _______ عروة عيسى www.orwah.net
أرسلت بتاريخ: 2006/2/17 14:45
حررت بواسطة orwah في 2006/2/21 13:09:53
|
|
خيارات
|
||
رد: دورة في برمجة تطبيقات الشبكة من نوع مخدم-زبون -1- |
||
|---|---|---|
|
مدير الموقع
![]()
مشترك منذ:
2005/2/13 15:07 من Syria
الردود:
1192
![]() |
دورة في برمجة تطبيقات الشبكة من نوع مخدم-زبون
الدرس الثاني , ما هي إندي InDy : كنت قد كتبت شيء عن Indy في المنتدى منذ فترة يمكن الاستفادة منه : هي الإختصار للكلمة Internet Dyrect , وهي مجموعة من مكونات الإنترنت المفتوحة المصدر , خاصة بتطوير البرامج التي تعتمد على بروتوكولات الإنترنت الشائعة ,. تمت إضافتها على شريط ادوات دلفي إبتداء من النسخة السادسة . Indy هي مكتبة تطوير متعددة المجاري (Multi threading) تعتمد على الـ Blocking Socets , وهي متاحة من اجل كل من اللغات التالية : Borland delphi و Borland C++ Builder لنظام ويندوز Borland Kylix لنظام لنكس ومدعومة في Delphi 2005 studio لكل من Delphi و C# Builder لأنظمة .NET تستخدم indy من اجل تطوير تطبيقات وبرمجيات الإنترنت , مثلا البرمجيات من النوع (مخدم / زبون) . وهي مجموعة من العناصر يصل عددها إلى أكثر من مئة عنصر في Delphi 7 , تقسم إلى : *- عناصر الزبون *- عناصر المخدم *- عناصر دعم وتحكم إضافية ومتفرقات الجديد في InDy هو جمعها للقوة والسهولة معا هذه لائحة موجزة لبعض ميزاتها التي تحضرني الآن : 1- شفرة indy مفتوحة المصدر ,, أي بإمكان أي شخص ان يضطلع عليها ويتعلم منها ويعدل فيها . 2- indy تدعم منصات متعددة ( cross-platform) , أي أنها يمكن أن تعمل على لينكس وويندوز و.NET بدون تغيير بالشفرة , 3- إندي تغلف عملية الإتصال , تقوم إندي بتغليف عمليات الإتصال وإجرائيات البروتوكولات , وبالتالي يستطيع المبرمج كتابة تطبيقاته دون الحاجة ليكون على معرفة تامة بتفاصيل البروتوكولات والعمليات عليها 4- تدعم indy مايسمى MBCS ( multibyte character sets) وهذه ميزة مهمة للتطبيقات غير الناطقة بالإنكليزية . أي أنك تستطيع إرسال محارف آسكي باللغة العربية مثلا .. أو الكوريخ واليابانية والصينية الخ .. 5- تدعم indy الطيف الأوسع من بروتوكولات الإنترنت ... بما فيها الأساية مثل : TCP و UDP . والبروتوكولات الأبناء مثل SMTP و POP و TELNET و GOPHER و ECHO وغيرها .. وربما لانبالغ إذا قلنا انها تدعم كل بروتوكولات الإنترنت المشهورة اليوم ,التي تعود للأب IP .. وهذا يعني انك لن تحتاج ادوات أخرى غيرها عند تطوير برامجك الواسعة .. 6- indy مبنية على تقنية المجاري المتعددة Multi threading , وهي ميزة لاتقد بثمن للتطبيقات المتقمة , وتوفر أداء مستقر وتقلص مشاكل Freezing الشهيرة بالتطبيقات الشبكية , كما أن هذا يعني أن مخدمات indy تستطيع التعامل مع عدد كبير من الزبائن في نفس اللحظة 7- تدعم indy مايسمى thread pooling , أي أن لانحفظ مجرى محدد لكل زبون يشغلة طوال الوقت سواء أكان على إتصال أو لا , بل تتم عملية تحرير المجاري بصورة ديناميكية , وطالما ان الزيون لايستخدم المجرى يتم إستثمارة مع زبون آخر . وهذا يعتبر إدارة حكيمة للذاكرة 8- indy مبنية على استدعاءات المقابس المتراصة Blocking sockets calls , الإستدعاء المتراص إن جاز التعبير يتم بشكل مشابه لإستدعاءات توابع الباسكال ,وهذا يعطي مرونة بالغه حيث تتم كتابة الشفرة سطر وراء الآخر وتتولى أندي تحرير نفس المقطع البرمجي عدة مرات في الذاكرة من أجل كل زبون متصل على حدة دون إرباك المبرمج بذلك . البرامج مخدم/زبون المصممة على indy تعمل بنفس الطريقة التي تعمل عليها مخدمات/زبائن Unix , الفرق هو أن indy اكثر سهولة . وبالمقابل استفادت indy من الـ threading الموجود في ويندوز لتعطي خليط القوة المنعش بين هاتين المنصتين .. فكرة عمل Indy مختلفة عن باقي مكونات برمجة الشبكات , حيث أن indy تستخدم مبدأ Blocking socket وإذا اردنا إيجاز فكرة عملها فهي تتم كالتالي : مخدم إندي يملك مجرى تنصت هدفة اكتشاف طلبات الزبائن , عندما يقوم زبون ما بطلب اتصال من المخدم يكتشف المخدم طلب الزبون ويؤسس الإتصال مع الزبون في مجرى جديد مستقل عن مجرى تنفيذ البرنامج الرئيسي ويتصرف هذا المجرى كأنه جزء برمجي مستقل (Multi threading response) , الآن يملك كل زبون متصل قناة اتصال خاصة به مع المخدم تؤمن عملية نقل البيانات بينه وبين الزبون وكل ما على الزبون هو انو يكتب في هذه القناة طلبة ثم يستمع ليتلقى الرد , وعند الانتهاء يتم قطع الإتصال وتحرير القناة أو تسليمها لزبون جديد .. حسنا .. فكر معي ماهو مقدار السهولة التي سنكسبها كمبرمج في بناء تطبيق مخدم-زبون ضخم وفاعل , حيث أن بناء برنامج يخاطب 1000 زبون هو بنفس سهولة بناء برنامج يخاطب زبون واحد .. ليس من واجباتك أن تدير عملية الإتصال ولا عملية حجز القنوات ولاتفاصيل تبادل البيانات , مهمتك الفعلية والأساسية هي كتابة الشفرة المتعلقة بمعالجة طلبات الزبائن من المخدم , وما عدى ذلك هو سطور قليلة لإرسال الطلبات وتلقيها أو هو رغبة منك بتغيير هذا السلوك لضرورات برنامجك .. طريقة indy ثورية بكل معنى الكلمة على صعيد : 1- الأداء 2- البرمجة والتصميم أي أنها تزيد من سهولة بناء تطبيقات ضخمة وكفوئة معا للمبرمج العادي , وهذا يعني رفع انتاجية مطور تطبيقات الشبكة بشكل يستحق الاحترام Indy هي الأفضل في عالم بناء برمجيات مخدم-زبون ليس فقط في دلفي بل على صعيد لغات البرمجة الأخرى أيضا . رغم ان طريقتها مختلفة عن الأدوات المعروفة التي تستخدم الاستدعاءات من نوع non-blocking socket ومعظمها تتصرف بطريقة غير متزامنة .. وهنا تكمن اهمية indy التي اعتبرها شخصيا أهم مكتبة أدوات بهذا المجال .. على الأقل حتى اليوم . كتابة تطبيقات Indy تقسم مجموعة مكونات indy إلى : - عناصر الزبون - عناصر المخدم - عناصر دعم وتحكم مختلفة من اجل مساعدة العناصر السابقة واتمام عملها لبناء تطبيق مخدم-زبون نقوم ببناء برنامجين مستقلين الأول برنامج المخدم , يحوي أحد عناصر الصفحة Indy Servers من شريط ادوات دلفي , وليكن على سبيل المثال الاكثر استخداما للتوجهات العامة : IdTCPServer الثاني برنامج الزبون , يحوي أحد عناصر الصفحة Indy Clients من شريط ادوات دلفي , ويجب أن يجوي العنصر المقابل للعنصر "البروتوكول" الذي اخترناه من برنامج السيرفر .. وبالتالي سيكون : IdTCPClient هذين العنصرين IdTCPServer و IdTCPClient هما عنصرا indy الخاصين بالبروتوكول TCP كما هو واضح من اسميهما , احدهما يسهل على المبرمج القيام بوظائف البرنامج السيرفر , والآخر القيام بوظائف الزبون .. من خصائص البروتوكول TCP أنه بروتوكول أب ينضوي تحتة عدد من البروتوكولات الأبناء الأخرى التي تعتمد عليه في تحقيق عملها , وهو البروتوكول الشائع الاستخدام في المجالات العامة التي يلزمنا فيها ضمان ارسال \ استقبال البيانات بصورة صحيحة . TCP بروتوكول موثوق , فهو يضمن وصول البيانات كما ارسلت وإلا فهو يعيد الارسال حتى ينجح TCP بروتوكول يحتاج تأسيس اتصال Connection Based لإنه يجب ان يحتفظ بالخط الذي ارسل عليه الطرف الأول لكي يطلب اعادة الارسال منه في حال وصلت البيانات مشوهة . TCP ليس البروتوكول الأسرع , فعملية ضمان وصول البيانات بسلامة تتطلب ارسال مجموعة من معلومات التحكم والفحص مع البيانات الأصلية مما يزيد من حجم الحزمة المرسلة وبالتالي زمن اطول للارسال TCP ليس بروتوكول بث مشاعي , أي أنه لايمكننا أن نقول ارسل هذه المعلومة لكل من تجده في طريقك من الحواسيب على الشبكة .. كما في تطبيقات الفيديو على الشبكة مثلا (اشتراك الكابل) بل يجب تزويده بعنوان الجهاز الهدف مسبقا وفي حال الرغبة بارسال لأكثر من جهاز يتم تكرار عملية الارسال لكل جهاز لوحدة .. كيف تعمل عناصر Indy : يقوم الزبون بثلاث خطوات نظرية : 1- تأسيس اتصال مع المخدم 2- ارسال\استقبال البيانات 3- قطع الاتصال كما تفعل انت عندما تستخدم الهاتف , تتصل اولا بصديقك ثم تتبادلون الأحاديث ثم يتم انهاء وقطع الاتصال . حسنا يلزمك اولا للأتصال بصديقك أن تحدد رقم الهاتف الخاص به , ورمز المحافظة مثلا .. كذلك ليقوم الزبون بالأتصال بالمخدم يلزمنا تحديد امرين كما اسلفنا : - Host عنوان المخدم (رقم ip أو اسم Domain ) - Port المنفذ الذي يتنصت عليه المخدم (قد يوجد عدة مخدمات كل مخدم يعمل على منفذ مستقل وله زبائنة الخاصين بحيث لايحدث تضارب في عملهم) ((راجع المقدمة النظرية بالدرس الأول )) حسناً إذاً .. برمجيا ومن منظور المطور سأضع 4 مراحل أو خطوات لإتصال الزبون بالمخدم : 1- وضع قيم host و port لعنصر indyclient (إما من ضابط الكائنات أو برمجيا) 2- شفرة الاتصال 3- شفرة الارسال \الاستقبال (حسب برنامجك) 4- شفرة قطع الإتصال الخطوات 1 و 2 و 4 سهلة جدا ومتكررة في كل برنامج دائما بنفس الصيغة , أما الخطوة 3 فهي تختلف حسب كل برنامج .. إذا يمكن القول أن هناك صيغة ثابته لكتابة شفرة عنصر الزبون من إندي , أبسط صيغة يمكن كتابتها هي : السطرين الأولين يستطيع الأعمى أن يعرف أنهما يضبطان قيمتي المضيف والمنفذ الذين يعمل عليهما جزء المخدم الذي سنكتبة بعد قليل , ومن المهم أن تكون هذه القيم نفسها التي سيعمل عليها المخدم وإلا لن يتعرف المخدم على الزبون .. لاحظ أن Host وضع فيه القيمة 127.0.0.1 وهو رقم ثابت يتعرف علية أي جهاز , ويقصد فيه الجهاز الذي يعمل علية برنامجنا مهما كان هذا الجهاز , وهذا يسهل كثيرا على المبرمجين اختبار برامج الشبكة على الجهاز المحلي , حيث يقومون بتشغيل البرنامجين معا على الجهاز وبوضع 127.0.0.1 يقوم كل جهاز بالارسال لنفسة من زبون إلى مخدم او بالعكس .. معلومة : تستطيع كتابة localhost بدل 127.0.0.1 وهي تسمى loopBack .. مشابهه للمتحول self في دلفي أو this في c++ . فعندما يقوم جهاز بارسال بيانات إلى localhost فأن هذه البيانات تعود وتحول اليه نفسه وكأنه استقبلها من جهاز اخر , وبالتالي فأن تعامل الجهاز مع localhost سواء ارسال او استقبال يتم بنفس طريقة التعامل مع جهاز اخر على الشبكة , وهذا يجعلها طريقة مثاليه لاختبار وتجريب البرمجيات محليا قبل نقلها على الشبكة . الجزء الثاني الذي هو IdTCPClient1.Connect هو السطر المسؤول عن طلب الاتصال بالمخدم وبالطبع الجزء الرابع أو السطر IdTCPClient1.Disconnect هو المسؤول عن قطع الاتصال . الاتصال بشبكة قد يأخذ وقت حسب ازدحام الشبكة وهذا يجعل الاستجابة غير آنية احيانا كما أن وسط الشبكة تكثر فيه الأخطاء لذلك يفضل أن نعدل صيغة الاتصال السابقة بجملة try finally التي تجعل تطبيقنا قوي أكثر , وتضمن انهاء الاتصال بجميع الاحوال : الصيغة الجديدة والمفضلة هي : - وضع العنصر IdTCPClient1 على النموذج - ضبط الخاصتين Host و Port من ضابط الكائنات - استخدام الشفرة التالية : لقد تناولنا الآن الصيغة الاساسية التي يستخدمها الزبون للاتصال بالمخدم وبقي علينا الجزء المتعلق ببرنامج المخدم : للمخدم من وجهة نظري 3 أطوار أيضا هي : 1- بدء الخدمة 2- الاستجابة لطلبات الزبائن 3- انهاء الخدمة - بدء الخدمة يتم بالسطر وهذا يعني أن المخدم اصبح جاهزا للتنصت والاجابة على الزبائن , يمكن ان يتم ضبط القيمة من ضابط الكائنات مباشرة - الاستجابة للطلبات , ويتم ذلك بوضع شفرة في معالج الحدث OnExecute الخاص بالعنصر IdTCPServer .. حيث يتم قراءة الطلب وكتابة الرد هنا .. ويمكن الاستجابة لمعالجات احداث اخرى مثلا OnConnect ويتم قدح هذا الحدث عند اتصال أي زبون جديد . - انهاء الخدمة يتم بالسطر : أهم شيء يجب القيام فيه قبل كل ذلك هو ضبط ip و port المخدم على القيم التي اتفقنا عليها في برنامج الزبون .. لايوجد أكثر من ذلك اتحدث به حول عنصر المخدم , ولابد من مثال عملي مبسط لارسال واستقبال البيانات لتوضيح هذه الافكار عمليا .. دعونا نجرب مثال بسيط : فكرة المثال ستكون بسيطة جدا .. النظام سيتألف من برنامجين . برنامج زبون وبرنامج مخدم الزبون يطلب التاريخ الحالي من المخدم , ويعرض النتيجة لدية .. أولا بناء برنامج الزبون : نفتح مشروع جديد نضع زر جديد عنوانة Get Date نضع memo نضع المكون IdTCPClient1 من الصفحة Indy Clients ونضبط خصائصة كالتالي : - Host بالقيمة 127.0.0.1 - port بالقيمة 9099 ثم في حدث الزر نكتب الشفرة التالية : الآن نحفظ الممشروع باسم client كتابة وقراءة البيانات في برنامج الزبون لابد أنك ضحكت ضحكة عالية عندما لاحظت بساطة وسهولة ارسال واستقبال البيانت من برنامج الزبون .. الموضوع بهذه البساطة : للارسال أو كتابة البيانات في القناة نستخدم Writeln أو write للأستقبال أو قراءة البيانات من القناة نستخدم readln أو read أيـــــــــه أيام الباسكال تعود مجددا ... ثانيا , بناء برنامج المخدم : نفتح مشروع جديد ونضع عليه عنصر IdTCPServer1 فقط وهو من صفحة ind servers الآن نضبط خصائصة بالشكل التالي : - الخاصية Active بالقيمة true - الخاصية Bindings . تفتح امامنا مربع صغير نضع في حقل IP address القيمة 127.0.0.1 نضع في حقل Port القيمة 9099 ثم نضغط على زر add يجب أن يظهر الأن القيمة 127.0.0.1:9099 في الخاصية Bindings أو مباشرة نضع القيمة في الخاصية بدون الحاجة لذلك , والقيمة تكون هي 127.0.0.1:9099 طبعا الآن انتهينا من كل شيء ولم يبقى أمامنا سوى أن نبرمج الجزء الخاص بالرد على الزبون .. الزبون يتصل بالمخدم ويرسل له الكلمة date .. الآن يجب أن نفهم السيرفر أنه عندما يستقبل الكلمة date عليه أن يرسل التاريخ الحالي للجهاز الذي ارسل إلية date .. حسنا فلنقم بذلك بطريقة indy الرائعة : في معالج الحدث OnExecute الخاص بالمكون IdTCPServer1 ستلاحظ مايلي : وجود المتحول المعرف مع اجرائية OnExecute الذي هو AThread: TIdPeerThread هذا المتحول ببساطة هو كالتالي .. كلما اتصل زبون جديد بالمخدم تم إنشاء Thread أو قناة خاصة به , فالمتحول إذا يعطى لكل زبون لكي يرسل المخدم عن طريقة الاستجابة للزبون .. إذا الأن نعرف أننا يجب أن نقرأ ونكتب باستخدام هذا المتحول . للمتحول AThread خاصية Connection التي يتم كل ذلك عن طريقها كما يلي : للقراءة : AThread.Connection.ReadLn للكتابة : AThread.Connection.WriteLn وهذا هو كل ما نحتاج إلية .. الآن تصبح الشفرة كالتالي : بهذه الشفرة البسيطة , يقرأ السيرفر القناة التي فتحت لكل زبون فإذا وجد ان احد هذه الزبائن قد ارسل الطلب date إلية , يقوم بإعادة التاريخ على نفس القناة التي فتحت مع الزبون وبالتلي نضمن ان التاريخ المعاد لن يرسل سوى إلى الزبون الذي طلبة , ويتم معالجة كل زبون على حدة وبدون تداخل ولو كانو آلاف الزبائن .. لتجريب المشروع الآن 1- شغل برنامج السيرفر أولا 2- اترك برنامج السيرفر شغال , وشغل برنامج الزبون 3- جرب ضغط الزر date ولاحظ النتيجة بإمكانك الآن أن تجري تعديلات عديدة على البرنامج تجرب فيها ما تعلمتة جرب أن تضع لائحة أوامر متعددة يستجيب لها السيرفر غير الأمر date وتلاعب بالبرنامجين حتى تطوير بعض افكراك الخاصة وتتمرن على ما قمنا به .. جرب البرنامج على شبكة فعلية , وذلك بتغير رقم الip للسيرفر حسب الجهاز الذي يعمل عليه جرب اتصل الأن من برنامج الزبون للأي بي الجديد تهانينا أنت الأن قادر على ارسال واستقبال البيانات على شبكة باستخدام منظومة معمارية مخدم-زبون بسيطة وأساسية البرنامجين بالمرفقات ..
أرسلت بتاريخ: 2006/2/20 16:36
|
|
خيارات
|
||
رد: دورة في برمجة تطبيقات مخدم-زبون باستخدام Indy |
||
|---|---|---|
|
عضو مبتديء
![]()
مشترك منذ:
6/13 12:59 الردود:
1
![]() |
السلام عليكم ورحمة الله وبركاته
لي عضيم الشرف لانتمائي الى هدا المنتدى الجميل واكون بينكم بارك الله فيك اخي الكريم عروة عيسى على هدا الشرح المميز اخي لديا مشكلة واجهتني عند تشغيل برنامجك الدي ارفقته وتتمثل في مايلي : في هدا السطر : s:= readln; ويكتب لي : [DCC Error] Unit1.pas(37): E2010 Incompatible types: 'string' and 'procedure, untyped pointer or untyped parameter' علما اني استعمل دلفي 2010 جزاك الله خيرا
أرسلت بتاريخ: 6/13 13:41
|
|
خيارات
|
||
يمكنك قراءة موضوع.
لا يمكنك إضافة موضوع جديد.
لا يمكنك الرد على المشاركات.
لا يمكنك تحرير مشاركاتك.
لا يمكنك حذف مشاركاتك.
لا يمكنك إضافة إستفتاء جديد.
يمكنك التصويت في الإستفتاءات.
لا يمكنك إرفاق ملفات في مشاركاتك.
لا يمكنك المشاركة بدون موافقة المشرف.




خيارات
indy.zip