هذا هو حوار تخيلت فيه ان احد الاعضاء يسال حول الوينسوك
************************************************************
العضو: السلام عليكم
طارق: و عليكم السلام و رحمته و بركاته
العضو : اخ طارق من الفريق العربى للبرمجه
طارق : نعم
العضو : مرحباً …. هل يمكنك مساعدتى اخ طارق
طارق: إن استطعت إن شاء الله
العضو: اريد منك توضيح لكيفية عمل برامج العميل / الخادم
طارق: اه اولاً قبل ان ابدأ اريدك ان تعرف انه قبل البدأ فى هذا البدا فى مثل هذه النوعيه من التطبيقات لابد و ان يكون مستواك فى الفيجوال بيسك متوسط او اكثر قليلاً اى انك تستطيع التعامل مع ادوات التحكم الاساسيه و مصفوفة الادوات و تستطيع عمل الدوارات و الشرط و التعامل مع المصفوفات والاجراءات و الدوال و التعامل مع الملفات
العضو: الحمد لله
طارق: ايضاً يجب ان تملك معرفه اساسيه حول الشبكات و البروتوكولات الاساسيه
العضو: هل من مكان استطيع البدأ منه
طارق: نعم http://www.msdn.microsoft.com و ابحث حول الوينسوك
العضو: شكراً لك و الان هل يمكن ان نبدأ قليلاً
طارق: اولاً هناك العديد من الادوات التى يقدمها لك افيجوال بيسك للتعامل مع الاتصالات الشبكيه سواء عبر انترنت او فى شبكه ايضاً و الاتصالات الهاتفيه
العضو: ما هى هذه الادوات
طارق: Winsock وهى مثار حديثنا و internet transfer control و web browser control و msocm
طارق: بالاضافه إلى دوال ال API و ادوات اخرى تقدمها بعض الشركات للمبرمجين
العضو: ما هى فائدة الاداه وينسوك
طارق : تمكنك هذه الاداه من صنع اى برنامج يعتمد فكرة العميل – الخادم مثل برامج الشات والوصول إلى قواعد البيانات و …..
العضو(مقاطعاً) : و ماذا عن ……
طارق (مقاطعا) : نعم وبرامج الاختراق
العضو: كيف يمكننى استخدام هذه الاداه إذاً
طارق: اولاً عليك بإضافة الاداه إلى برنامجك من قائمة PROJECT ثم COMPONENT ثم MICROSOFT WINSOCK
العضو: نعم وماذا عن الاكواد اللازمه
طارق: لا تتعجل … الان ماذا يحدث إن اردت الاتصال هاتفياً بى
العضو: ساطلب رقمك ثم اسال عنك
طارق: جميل إذاً فى الاول ان تعرف رقم هاتفى ثانياً تقوم بعمل الاتصال
العضو: نعم
طارق:اى انك يجب ان تعلم رقمى نفس الفكره سنستخدمها هنا يجب ان تعلم ال ip الخاص بالخادم
طارق: اولاً سيكون لدينا برنامجين واحد ينفذ الاول الاوامر و سنسميه الخادم server و الاخر هو العميل الذى يوجه الاوامر
العضو: احب هذه اللغه البسيطه … اكمل من فضلك
طارق: لا تقاطع إذاً إلا لو لم تفهم شيئاً
طارق: الان نحن فى برنامج العميل الذى سيقوم بالاتصال مع الخادم اولاً
Swsck.connect serverip,port
حيث ان swsck هى اسم الوينسوك و ال Port هو رقم البورت
العضو: انت الان استخدمت الطريقه connect و مررت لها وسيطتين الاولى هى رقم ال ip الخاص بالخادم و الثانيه هى البورت المفتوح لدى الخادم والذى سيستقبل الاتصال عليه
طارق: ارى انك معى الان …. دعنا نكمل إذاً
طارق: سنبرمج كل خطوه منطقياً الان افتح برنامج الخادم واضف له اداه وينسوك جديده
العضو: تمام
طارق: ماذا يحدث عن ناديت على الخادم فى المطعم
العضو: سيأتى على و يستمع إلى طلباتى و يكتبها فى ال النوته اللى معاه
طارق: بسم الله ما شاء الله محترف
العضو: من بعض ما عندكم
طارق : انا سانفذ كلامك ولكن برمجياً
اكتب هذا الكود لكى يستمع خادمك على العميل فى الحدث form load
Cwsck.listen
طبعاً cwsck هى اسم اداة الوينسوك عند العميل
العضو : واين طلبات العميل التى سيرسلها
طارق: لا تتعجل
طارق : طبعاً الخادم سيقبل طلبك و لكن كيف نكتب هذا القبول برمجياً
العضو :
if the server did not accept the order then he will be fired end if
طارق : funny
طارق : فى الحدث connection request للاداة وينسوك فى برنامج الخادم اقبل الاتصال
Cwsck .accept requestid
العضو : لا افهم
طارق : الخادم قبل اتصالك و اعطاك رقم للطلبيه اللى هو requestid
العضو : فهمت
طارق : الحمد لله
طارق : سنرجع للعميل سافرض ان العميل سيوجه رساله نصيه للخادم ضع اداة نص و زر
افضل ان تعرف متغير عام ليحمل الرساله النصيه
الان عندما تضغط الزر سيقوم برنامجك اللى هو العميل بتوجيه الرساله النصيه للخادم
فى كود الزر
Mymessage=text1.text
حيث ان mymessage هى المتغير الذى قمت بتعريفه و سيحمل اوامرك للخادم
العضو : مفيش مشاكل
طارق : الان سنرسل البيانات فى اى مكان ضع به هذا الكود
Swsck.senddata mymessage
العضو: سهله انت استخدمت الطريقه senddata لإرسال قيمة المتغير إلى الخادم
طارق : نعم …. اظنك ترى ان الاكواد مفهومه منطقياً
العضو : نعم
طارق : دعنا نتابع إذاً
ارجع للخادم و ستجد حدث اسمه dataarrival للاداه وينسوك
فى هذا الحدث سيستقبل الخادم قيمة المتغير التى ارسلتها له
العضو : اعتقد إذاً انه يجب على ان اعرف متغيراً يحمل قيمة المتغير التلى ارسلها العميل لبرنامجى
طارق : تمام هذا ما سيحدث بالفعل
فى الحدث dataarrival
Cwsck.getdata recieeddata
حيث ان recieveddata هو المتغير الذى قمت بانشائه ليستقبل اوامر العميل
العضو: طيب وهو حيفهم كلامى ازاى دلوقتى … اقصد حينفذه ازاى
طارق : بما انا نعلم انها رساله نصيه فييمكنك ان تجعل الخادم يعرضها عن طريق ال message box او يضعها فى ملف او اى شئ اخر يترائى لك
العضو : طيب وماذا لو ان المطعم لا يحتوى إلا على خادم واحد يعنى الخادم حينفذ طلبات اكثر من زبون اقصد عميل بلغتنا
طارق : بلغتنا يبقى حنسميها multi connections متعدد الاتصال
و فى هذه الحاله ساضطر لان اجعلك تفكر واتمنى الا تكون من المؤمنين بأن التفكير ضار جداً بالصحه
بمعلوماتك تفتكر اعمل ايه
العضو : نستورد اكتر من خادم من الفلبين
طارق : يا سلام عليك يا واد يا بكار …. حنعمل مصفوفة ادوات يا ذكى و حنعمل index لمصفوفه من الوينسوك
العضو : متاكد
طارق : "لا تجادل و لاتناقش و إلا وقعت فى المحظور" (مزحه) … الكلام من مايكروسوفت
اقتباسAccepting More than One Connection RequestThe basic server outlined above accepts only one connection request. However, it is possible to accept several connection requests using the same control by creating a control array. In that case, you do not need to close the connection, but simply create a new instance of the control (by setting its Index property), and invoking the Accept method on the new instance
و هذا هو الكود
Private intMax As Long Private Sub Form_Load() intMax = 0 sckServer(0).LocalPort = 1001 sckServer(0).Listen End Sub Private Sub sckServer_ConnectionRequest _ (Index As Integer, ByVal requestID As Long) If Index = 0 Then intMax = intMax + 1 Load sckServer(intMax) sckServer(intMax).LocalPort = 0 sckServer(intMax).Accept requestID Load txtData(intMax) End If End Sub
العضو : اهذا كل شئ
طارق : اعتقد انه بإستيعابك ما قلته لك ثم ببحثك عن مواضيع خاصه بالوينسوك و كتابتك لبرنامج صغير تتطبق فيه ما قلناه سيكون رائعاً
العضو : اشكرك اخ طارق
طارق : العفو … استاذنك الان
العضو : إلى اللقاء






