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

تأسيس الاتصال بين الخادم والزبون عن طريق أداة الوي

مغلق
بدأه أبو حنان في 4 مارس 2006 · 7 رد · 1,979 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله

كثرت - في الآونة الأخيرة - الأسئلة التي تدور في فلك كيفية الاتصال بين أكثر من برنامج زبون مع برنامج السيرفر، وبالرغم من وجود ردود لا بأس بها على هذه الأسئلة

إلا أنها غالباً لا تكون صحيحة 100% ، فمثلاً من ضمن تلك الأسئلة :-

أريد أن أجعل برنامج السيرفر يقبل أكثر من عشرة اتصلات لإجهزة الشبكة مثبت عليها برنامج الزبون فماذا أفعل ؟

وتجد الرد على هذا السؤال كالتالي :

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

أو :-

ضع أداة وينسوك واعمل منها مصفوفة وضع بعدها ( 9 ) أخرى ............ وهكذا .

والسؤال المهم هنا :-

كيف سيكون الحال إن كان المطلوب هو اتصال ( 100 ) مائة جهاز في الشبكة أو أكثر على برنامج السيرفر ؟

وهل سنضع 100 أداة وينسوك - سواء بشكل منفرد أو على شكل مصفوفة - على نموذج السيرفر ؟

والإجابة بالطبع = ممكن .

لكن ما الوقت الذي يتطلبه هذا النموذج للتحميل ؟ إضافة إلى وجود أدوات أخرى بالطبع عليه ؟

وما حجم الذاكرة المطلوبة لإستيعاب كل تلك الأدوات ؟

للإجابة على هذه الأسئلة تابع معي وتعلم الطريقة الصحيحة لعملية الاتصال بين برنامج الزبون وبرنامج السيرفر :

مع ملاحظة :- أنني لن أتحدث هنا عن ماهية البروتوكول المستخدم في الشبكات ولا عن المنافذ والمآخذ ولا فهم نظم التشغيل ، مع مراعاة أن فهم كل تلك الأشياء التي لن أتحدث عنها هي الطريق الوحيد للتمكن من برمجة الشبكات .

دعونا نبدأ - بسم الله

إعداد برنامج السيرفر :

ضع أداة وحيدة من وينسوك ( Winsock ) على النموذج ثم عين القيمة ( 0 ) صفر للخاصة Index بعد تسمية الأداة باسم WskServer .

والهدف من تعيين القيمة ( 0 ) للأداة هو جعلها مصفوفة ولكن دون وضع أي نسخ أخرى منها على النموذج .

في قسم التصريحات العامة للنموذج اكتب الكود التالي :-

Const MaxConnection As Integer = 100

شرح الكود :

قمنا بتعريف ثابت مهمته تعيين الحد الأقصى لعدد التصالات المسموح بها من برنامج الزبون وجعلنا قيمته = 100 اتصال ، أي يمكن لبرنامج السيرفر قبول الاتصال من برنامج الزبون لمائة جهاز على الشبكة .

في حدث تحميل نموذج السيرفر اكتب الكود التالي :

WskServer ( 0 ).LocalPort = 2233
WskServer ( 0 ).Listen

شرح الكود :

حيث أن أداة وينسوك ستعمل كمصفوفة فلقد قمنا بتعيين العنصر ( 0 ) من المصفوفة ليعمل كمستمع للاتصالات القادمة على المنفذ رقم 2233 .

والآن اضغط ضغطاً مزدوجاً على أدادة وينسوك لفتح نافذة محرر الكود واختر من قائمة الاحداث الحدث ConnectionRequest ، وهذا الحدث هو الخاص بطلب الاتصال وقبوله من برنامج الزبون .

اكتب الكود التالي في هذا الحدث :

Dim IntIndex As Integer
Dim Wsk As Winsock

     If Index <> 0 Then Exit Sub
	IntIndex = 1

	For Each wsk In WskServer
     If Wsk.index > 0 Then
        If IntIndex < Wsk.Index Then Exit For
                        IntIndex = IntIndex  + 1
	End If 
	DoEvents
	Next Wsk
   If IntIndex > MaxConnection  Then Exit Sub

	Load WskServer ( IntIndex )
  WskServer ( IntIndex ).accept requestID

شرح الكود

يعد هذا الكود اهم اكواد عملية الاتصال بين برنامج الزبون وبرنامج السيرفر ففى السطر الاول والثانى من الكود صرحنا عن متغيرين ، الاول سيحمل رقم عنصر المصفوفه والثانى يحمل اداة الاتصال 0

فى السطر الثالث اختبرنا قيمة فهرس الاداة ، فاذا كانت لا تحمل العنصر رقم صفر عندها يتم الخروج من الاجراء 0

فى السطر الرابع جعلنا قيمة المتغير الذى سيحمل رقم عنصر المصفوفة = ( 1 ) ثم بعد ذلك قمنا بعمل حلقة تكرارية لعناصر الاداة المحملة بالذاكرة حاليا ومن ثم زيادة عناصر المصفوفة بعنصر جديد 0

بعد نهاية الحلقة قمنا بالتاكد من عناصر الاداة بانها لم تتخطى العدد الكلى والمصرع عنه كثابت وهو ( 100 ) فى مثالنا ، فاذا كان العنصر الجديد قد تخطى هذا الرقم يتم الخروج من الاجراء ، فاذا لم يكن قد تخطاه نقوم فى السطر التالى بتحميل عنصر جديد من الاداة فى الذاكرة وقت التشغيل وفى النهاية يتم توجيه هذا العنصر ( الجديد ) لقبول الاتصال 0

ملاحظة :- لا تنسى ان تلفت نظر المستخدم لقبول هذا الاتصال باظهار تلميح او رسالة او ايقونة او ما شابه ذلك

بهذا نكون قد حملنا الاداة عند اللزوم فقط بما يعنى انه لا داعى لحجز ذاكرة لاداة لا تعمل حاليا 0

والسؤال الان :- نفرض انه كان هناك ( 50 ) جهاز متصلون بالسيرفر ثم خروج 20 جهاز منهم بما يعنى علميا اغلاق وإنهاء 20 عنصر من عناصر المصفوفة ولا زالو محجوزين في الذاكرة 0

لذلك سنكتب التالي :

اختر من قائمة الأحداث الحدث إغلاق Close واكتب فيه الكود التالي :

If WskServer ( Index ).State <> sckClosed Then 
	WskServer ( Index ).Close
End If 
Unload WskServer ( Index )
End If

أعتقد أن الكود السابق لا يحتاج لمزيد من الشرح ، حيث أننا قمنا بالتأكد من إغلاق الاتصال ثم قمنا باإلغاء تحميل عنصر مصفوفة الأداة ، إضافة إلى تفريغ منطقة المصفوفة لإجل تحميل عنصر آخر عندما يتم مستقبلاً طلب الاتصال مرة آخرى .

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

برنامج الزبون :

ضع أداة وحيدة من وينسوك ( Winsock ) على نموذج الزبون وسمها WskClient .

افتح نافذة محرر الكود وقم بعمل إجراء جديد باسم ConnectToServer واكتب فيه الكود التالي بحيث يصبح كامل الإجراء بالشكل التالي :

Private sub ConnectToServer ( )
  With WskClient
	If .State <> sckClosed Then .Close
                 .RemoteHost = "127.0.0.1"
    .RemotePort = 2233 
    .Connect
  End With
End Sub

شرح الكود

أول سؤال قد يخطر على بالك : لماذا قمنا بعمل إجراء خاص لعملية الاتصال ولم نقم مثلاً بكتابة كود الاتصال في حدث تحميل النموذج ؟

والإجابة على هذا السؤال ستأتيك بعد شرح الكود :

تحققنا أولاً من حالة الأداة ، فإذا لم تكن مغلقة نقوم باستدعاء الطريقة Close لإغلاق الاتصال .

ثم قمنا بتجهيز خاصيتي Remotehost و RemotePort واللتان يمكن تجهيزهما في أي نقطة تسبق عملية الاتصال .

1- خاصية Remotehost تمكننا من تعين اسم الكمبيوتر البعيد أو عنوان IP Address لذلك الكمبيوتر ، وفي مثالنا هنا قمنا بتعيين هذه الخاصية على نفس عنوان الكمبيوتر المحلي ، ويراعى طبعاً تغييرها عند وجود شبكة محلية فعلية .

2- خاصية RemotePort هي الخاصية هي المسئولة عن تحديد منفذ الاتصال الذي يستمع اليه برنامج السيرفر .

يراعى أن تغيير هذا المنفذ في برنامج السيرفر يستلزم تغييره في البرنامج الزبون وإلا فإن محاولة الاتصال ستبوء بالفشل .

ملاحظة هامة :- أرقام المنافذ من رقم ( 1 ) وحتى رقم ( 1023 ) منافذ محجوزة لمهام أخرى .

وأخيراً قمنا بعملية الاتصال عن طريق خاصية الاتصال للأداة .

جاء دور الإجابة على السؤال : لماذا جعلنا طلب الاتصال في إجراء مستقل ؟

من الممكن طبعاً وضع عملية الاتصال في حدث تحميل النموذج لكن ماذا ستفعل في حال كان برنامج السيرفر لا يعمل عند بدء تحميل نموذج الزبون ؟

في هذه الحالة لن يتم طلب وقبول الاتصال حتى تعيد تشغيل البرنامج الزبون مجدداً ، لهذا فقد قمنا بإنشاء إجراء مستقل حتى نتمكن من استدعاء هذا الإجراء في أي وقت نريده

قم بوضع مؤقت Timer وسمه Tmrreconnect واجعل خاصية Interval = 30000 بحيث يتم استدعاء الإجراء كل نصف دقيقة .

اضغط ضغطاً مزدوجاً على المؤقت لفتح نافذة محرر الكود واكتب فيها الشيفرة التالية :-

	If WskClient.State <> 7 Then
  Call ConnectToServer
	End If

شرح الكود

نقوم في هذا الكود باختبار حالة الاتصال فإذا لم تكن حالته = متصل يتم استدعاء إجراء الاتصال .

وبذلك نتمكن من الاتصال بالبرنامج السيرفر في أي وقت يبدأ فيه العمل سواء كان يعمي أثناء تشغيل برنامج الزبون أو بدء العمل بعد تشغيل برنامج الزبون .

يبقى لنا أن نجعل برنامج الزبون يقوم بطلب الاتصال عند بدء تشغيله وذلك بنداء اجراء الاتصال في حدث تحميل النموذج وذلك كما يلي :-

Call connectToServer

في الناهية أحب أن أنوه إلى أمر هام في برمجة الشبكات وهو :

إن أردت أن تقوم بتطوير برنامج قوي للتعامل مع الشبكات فعليك الإلمام الجيد بثلاث أشياء قبل الشروع في العمل هي :

1- نظم التشغيل - ليس من منظور المستخدم العادي بل من منظور مبرمج

2- الشبكات

3 - المستخدم

وطبعا الحديث عن تلك الاشياء يطول .

أرجو أن أكون قد وفقت في إضافة معلومة ولو بسيطة إلى معلوماتكم ؟

لمزيد من المقاللات حول الشبكات والتعامل مع الالات والمعدات - انتظرونا قريباً على موقعنا .

والله أعلى وأعلم

مختار أحمد

موقع الويب : http://www.luxorsystems.com

منتدياتنا :http://www.luxorsystems.com/forum/index.php

للمراسلة

luxorsystems@hotmail.com

للاتصال التليفوني

00201228085123

#2

شكراً للأخ ابو حنان

بس اخوي ممكن طريقة ارسال واستقبال الملفات مع امكانية استعراض مجلدات وملفات الخادم

مع اني قمت ببرمجة مثل هذا بس لقيت امكانية الاستقبال والارسال للملفات بطيئة نوعاً ما مقارنة ببرامج اخري

والعفوا اخوي

رُب ( وامعتصماه ) إنطلقت *** ملْء أفـواه الصبايا اليُتـم

لامـسـت أسْـماعـهـم لاكـنهـا *** لمْ تلامس نخْوة المعتصم

#3

اشكرك اخي الكريم ( ابو حنان ) على هذا الدرس الرائع ...

لقد حاولت عمل هذا المثال بنفس الاكواد مع اضافات بسيطة فقط وهي التأكد من حالة الاتصال ولكني واجهتني مشكلة وهي عندما يتصل العميل بالسيرفر يظهر على العميل كلمة ( متصل ) ... لكن يظهر على برنامج السيرفر كلمة ( جاري انتظار الاتصال ) .. وما ادري سبب هذه المشكلة ...

=======

والامر الثاني اذا اتصل مثلا العميل رقم ( 1 ) في الجهاز PC1 والعميل ( 2 ) PC2 ببرنامج السيرفر فكيف يمكن هنا ان يتحكم برنامج السيرفر في هذه العملاء ( PC1 & PC2 ) كمثلا ان يرسل برنامج السيرفر رسالة الى العميل ( 1 ) فقط او الى العميل ( 2 ) فقط او الكل مثلا فكيف يتم .. هل باخذ IP جهاز العميل او اسم الجهاز مثلا ...

ارجو المساعدة

ولكم مني جزيل الشكر

المرفقــــــــــــــــــــــــــــــــــــــــــــــــــااااات .. :) :blink:

com.rar

** أقم صلاتك قبل مماتك **

الصلاة : جالبة للرزق . حافظة ‏للصحة دافعة للأذى ، طاردة للأدواء ، مقوية للقلب ، مبيضة للوجه ، ‏مفرحة للنفس ، مذهبة للكسل ، منشطة للجوارح ، ممدة للقوى ‏،شارحة للصدر، مغذية للروح ، منورة للقلب ، حافظة للنعمة ، دافعة ‏للنقمة ، جالبة للبركة, مبعدة من الشيطان.

* هل تعلم أن النبي صلى الله عليه وسلم وصف تارك الصلاة بالكفر ؟

‏* هل تعلم أن الذي لا يصلي إذا مات لا يدفن في مقابر المسلمين!!

‏* هل تعلم أن أول ما تحاسب عليه الصلاة ؟

‏* هل تعلم أن تارك الصلاة يحشر يوم القيامة مع فرعون ؟

‏* هل تعلم أن تارك الصلاة مع المجرمين في جهنم ؟

#4

السلام عليكم ورحمة الله

بالنسبة لمشكلة Yemen VB6 فيمكنك البحث عن كتاب للأخ الفاضل رغيد الطيب في المنتدى فستجد فيه شرح مطول عن ارسال واستقبال الملفات .

مع أسفي الشديد لعدم قدرتي في الوقت الحالي على الرد عن استفسارك بالشرح والأمثلة نظراً لعدم وجود جهاز كمبيوتر لدي حاليا .

أما بالنسبة للأخ العالم :

اقتباس
لقد حاولت عمل هذا المثال بنفس الاكواد مع اضافات بسيطة فقط وهي التأكد من حالة الاتصال ولكني واجهتني مشكلة وهي عندما يتصل العميل بالسيرفر يظهر على العميل كلمة ( متصل ) ... لكن يظهر على برنامج السيرفر كلمة ( جاري انتظار الاتصال ) .. وما ادري سبب هذه المشكلة ...

ليست هناك مشكلة على الإطلاق فلو أمعنت النظر في شرحي السابق ستجد أننا خصصنا العنصر ( 0 ) من المصفوفة للإستماع فقط وفي حالة اتصال أي زبون يقوم هذا العنصر بتحميل عنصر جديد ومن ثم جعل هذه العنصر ( الجديد ) قبول الاتصال من الزبون المتصل ومن ثم رجوع العنصر رقم ( 0 ) مرة أخرى لإنتظام الاتصال من زبون أخر وبذلك فستجده دائما في حالة انتظار .

هذا بالنسبة للإستفسار الأول .

أعتقد أن فهمك لردي على الجزء الأول من استفسارك سيجعلك تدرك أن التعامل مع أي زبون بعد الاتصال سيتعلق حتماً برقم عنصر المصفوفة أثناء تحميله ، وبالتالي يمكنك وضع رقم عنصر المصفوفة في مكان ما أو متغير ما وبعد ذلك وعند إرسال رسالة أو ما شابهذلك لهذا الزبون فعليك التعامل مع هذا الرقم

أرجو أن أكون وفقت في الرد

والله أعلى وأعلم

مختار أحمد

موقع الويب : http://www.luxorsystems.com

منتدياتنا :http://www.luxorsystems.com/forum/index.php

للمراسلة

luxorsystems@hotmail.com

للاتصال التليفوني

00201228085123

#5

اخي الكريم ...

كيف بيتم ذلك اي ارسال رسالة ... ارجو التوضيح اكثر

** أقم صلاتك قبل مماتك **

الصلاة : جالبة للرزق . حافظة ‏للصحة دافعة للأذى ، طاردة للأدواء ، مقوية للقلب ، مبيضة للوجه ، ‏مفرحة للنفس ، مذهبة للكسل ، منشطة للجوارح ، ممدة للقوى ‏،شارحة للصدر، مغذية للروح ، منورة للقلب ، حافظة للنعمة ، دافعة ‏للنقمة ، جالبة للبركة, مبعدة من الشيطان.

* هل تعلم أن النبي صلى الله عليه وسلم وصف تارك الصلاة بالكفر ؟

‏* هل تعلم أن الذي لا يصلي إذا مات لا يدفن في مقابر المسلمين!!

‏* هل تعلم أن أول ما تحاسب عليه الصلاة ؟

‏* هل تعلم أن تارك الصلاة يحشر يوم القيامة مع فرعون ؟

‏* هل تعلم أن تارك الصلاة مع المجرمين في جهنم ؟

#6

اين انت يا اخي ابوحنان ...

** أقم صلاتك قبل مماتك **

الصلاة : جالبة للرزق . حافظة ‏للصحة دافعة للأذى ، طاردة للأدواء ، مقوية للقلب ، مبيضة للوجه ، ‏مفرحة للنفس ، مذهبة للكسل ، منشطة للجوارح ، ممدة للقوى ‏،شارحة للصدر، مغذية للروح ، منورة للقلب ، حافظة للنعمة ، دافعة ‏للنقمة ، جالبة للبركة, مبعدة من الشيطان.

* هل تعلم أن النبي صلى الله عليه وسلم وصف تارك الصلاة بالكفر ؟

‏* هل تعلم أن الذي لا يصلي إذا مات لا يدفن في مقابر المسلمين!!

‏* هل تعلم أن أول ما تحاسب عليه الصلاة ؟

‏* هل تعلم أن تارك الصلاة يحشر يوم القيامة مع فرعون ؟

‏* هل تعلم أن تارك الصلاة مع المجرمين في جهنم ؟

#7

هل من مجيب يا اهل المنتدى ..........

للرفع

للرفع

** أقم صلاتك قبل مماتك **

الصلاة : جالبة للرزق . حافظة ‏للصحة دافعة للأذى ، طاردة للأدواء ، مقوية للقلب ، مبيضة للوجه ، ‏مفرحة للنفس ، مذهبة للكسل ، منشطة للجوارح ، ممدة للقوى ‏،شارحة للصدر، مغذية للروح ، منورة للقلب ، حافظة للنعمة ، دافعة ‏للنقمة ، جالبة للبركة, مبعدة من الشيطان.

* هل تعلم أن النبي صلى الله عليه وسلم وصف تارك الصلاة بالكفر ؟

‏* هل تعلم أن الذي لا يصلي إذا مات لا يدفن في مقابر المسلمين!!

‏* هل تعلم أن أول ما تحاسب عليه الصلاة ؟

‏* هل تعلم أن تارك الصلاة يحشر يوم القيامة مع فرعون ؟

‏* هل تعلم أن تارك الصلاة مع المجرمين في جهنم ؟

#8

اين انتم يامشرفين

** أقم صلاتك قبل مماتك **

الصلاة : جالبة للرزق . حافظة ‏للصحة دافعة للأذى ، طاردة للأدواء ، مقوية للقلب ، مبيضة للوجه ، ‏مفرحة للنفس ، مذهبة للكسل ، منشطة للجوارح ، ممدة للقوى ‏،شارحة للصدر، مغذية للروح ، منورة للقلب ، حافظة للنعمة ، دافعة ‏للنقمة ، جالبة للبركة, مبعدة من الشيطان.

* هل تعلم أن النبي صلى الله عليه وسلم وصف تارك الصلاة بالكفر ؟

‏* هل تعلم أن الذي لا يصلي إذا مات لا يدفن في مقابر المسلمين!!

‏* هل تعلم أن أول ما تحاسب عليه الصلاة ؟

‏* هل تعلم أن تارك الصلاة يحشر يوم القيامة مع فرعون ؟

‏* هل تعلم أن تارك الصلاة مع المجرمين في جهنم ؟

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

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