17-09-12, 09:56 PM
بسم الله الرحمن الرحيم
دورة إحتراف الوينسوك
دورة إحتراف الوينسوك
المحتويات :
شرح الوينسوك .
برمجة برنامج بسيط بواسطة الوينسوك .
عمل إتصال عكسي .
برمجة برنامج محادثة.
مشروع نقل الملفات المباشر .
مشاريع متطورة مفتوحة المصدر تستخدم الوينسوك وهي منقولة من مواقع أجنبية وعربية .
بإذن الله ستجدون شروحات الأكواد بطريقة رائعة ، والبرامج التي يتم تصميمها منفصلة وتستطيعون برمجة كل واحد على حدة .
في هذه المقالة توجد فكرة طاغية على مجمل موضوعاتها وهي الإتصال العكسي ، لأنه هي التقنية المستخدمة في كل البرامج الحديثة ، ولكن لا مانع من شرح الإتصال المباشر كنوع من الفائدة وزيادة المعلومات ، وليس لأنها فقط للفائدة يعني أن لا يقوم القارئ بالإطلاع عليها ، بالعكس هي ضرورية أكثر من الإتصال العكسي لأنها هي الأساس في الإتصال .
[COLOR="#FF0000"]
الدرس الأول :
الجزء الأول :
[/COLOR]
شروحات الوينسوك تختلف من شخص لآخر ، فكل منا يفهمها حسب طريقته .
الوينسوك هي أداة مرفقة مع الفيجيول بيسيك تقوم بعمل شبكة محلية مكونة من :
اقتباس: عميل / خادم .
عميل / عميل .
وقد تستخدم للتحكم في الأجهزة عن بعد ، أو حتى للربط بين برنامجين في نفس الحاسوب ،
الوينسوك تقوم بتنفيذ الأوامر فقط ، أي أنها لا تستطيع فتح سواقة الأقراص بدون أوامر خارجية ، فللوهلة الأولى يظن المبرمج أن الوينسوك تقوم بجميع المهمات الصعبة ، ولكن هي بالحقيقة لا تقوم سوى بعدة أوامر ومنها :
الإتصال .
إقتباس : نقل البيانات SendData .
إستقبال البيانات GetData .
بالنسبة للوينسوك ، فهناك مشكلة عدم وجودها مع إصدارات الويندوز ، و يحتاج المبرمج إلى إرفاقها أو دمجها مع برنامجه لكي يعمل .
ويمكن أيضا برمجتها بواسطة دوال API وإنشاء الــ Sockets .
[COLOR="#FF0000"]الشرح :
[/COLOR]
الإتصال ( Connect ) :
في حدث الإتصال يلزم 4 أمور رئيسية :
اقتباس: 1- إغلاق أي إتصال سابق
2- تحديد المنفذ .
3- تحديد عنوان الأي بي IP Address .
4- الإتصال.
سؤال يطرح نفسه : لماذا يجب إغلاق أي إتصال سابق ؟؟
لكي يتم تجديد الإتصال ، و إغلاق أي إتصال غير مكتمل وأي إتصال قديم.
وتتم عملية الإتصال كالتالي :
PHP كود :
Winsock1.close
Winsock1.Connect "127.0.0.1", 303
إقتباس : في الخادم : عند الإتصال المباشر من العميل إلى الخادم .
في العميل : عند الإتصال العكسي من الخادم إلى العميل .
الإنصات ( Listen ) :
عملية الإنصات هي حجز المنفذ الذي سيتم تلقي طلب الإتصال من خلاله وتكون بخطوتين :
اقتباس: تحديد المنفذ .
الإنصات .
وتتم كالتالي :
PHP كود :
Winsock1.LocalPort = 303
Winsock1.Listen
عملية الإنصات أيضا من الممكن أن توضع في كلا البرنامجين ( العميل / الخادم ) .
قبول طلب الإتصال ( Accept ) :
تتم عملية قبول طلب الإتصال بخطوتين :
إقتباس : إغلاق أي إتصال جديد .
قبول طلب الإتصال .
وتتم كالتالي :
PHP كود :
Winsock1.close
Winsock1.Accept requestID
وتوضع شيفرة قبول طلب الإتصال في حدث الوينسوك Connection Request .
تحديد البروتوكول :
بروتوكولات الوينسوك عبارة عن بروتوكولين مختلفين تماما وهما :
إقتباس : TCP .
UDB .
البروتوكول TCP :
يستخدم إجراءات تأكيد وصول البيانات كاملة وعند فشل الإرسال تتم الإعادة من جديد .
البروتوكول UDP :
يعمل على توصيل البيانات بسرعة بدون التحقق من فشل الإرسال أو لا .
ولكن البروتوكول المعتمد في الإتصال والتواصل هو TCP ويكون في الغالب هو الأصل .
وتتم عملية تحديد البروتوكول كالتالي :
PHP كود :
Winsock1.Protocol = sckTCPProtocol
PHP كود :
Winsock1.Protocol = sckUDPProtocol
إرسال البيانات ( SendData ) :
تتم عملية إرسال البيانات لكي يقوم الخادم بتنفيذ الأوامر المطابقة للبيانات المستلمة .
وتتم بخطوتين :
إقتباس : تجاوز الخطأ عند وجود أي خطأ .
إرسال البيانات .
كالتالي :
PHP كود :
On Error Resume Next
Winsock1.SendData "HAMADA"
إستقبال البيانات ( GetData ) :
تتم عملية إستقبال البيانات بخطوتين في الأغلب وهي :
اقتباس: تعريف متغير يحمل قيمة نصية .
إسناد البيانات المستقبلة إليه .
وتكون كالتالي :
إقتباس :Dim Data as String
Winsock1.GetData Data
وتوضع شيفرة إستقبال البيانات في حدث الوينسوك DataArrival .
ومن الممكن عمل جملة Select case إذا كانت البيانات القادمة كثيرة .
إضافة الأداة :
تتم إضافة الأداة إلى المشروع كالتالي :
اقتباس: ctrl + T > Microsoft Winsock Control 6.0
الجزء الثاني :
برمجة برنامج بسيط بواسطة الوينسوك
بعد إعتماد شرح الوينسوك السابق ، دعونا ننتقل إلى المستوى الأعلى ، وهو برمجة الإتصال
أولا :ً برمجة الإتصال المباشر ( من العميل إلى الخادم ) :
العميل :
في برنامج العميل نحتاج للأدوات التالية :
أداة الوينسوك .
2 صندوق نص واحد لعنوان الأي بي ، والآخر للمنفذ .
3 ليبل .
تايمر ( Interval = 1 )
2 زر كوماند واحد للإتصال وواحد لقطع الإتصال .
ونسقها لتصبح على شكل برنامج محادثة .
كتابة النص البرمجي :
العميل :
في زر الأمر ( إتصال ) :
PHP كود :
On Error Resume Next
Winsock1.Close
Winsock1.Connect Text1.Text, Text2.Text
حيث إنه تم طلب الإتصال عبر المنفذ 303 بعنوان الآي بي إفتراضي وهو 127.0.0.1 والموجودان في صندوقي النص Text1 , Text2 .
في زر الأمر ( قطع الإتصال ) :
PHP كود :
On Error Resume Next
Winsock1.Close
Winsock1.listen
في التايمر :
PHP كود :
Dim State
For State = 1 To 10
Select Case Winsock1.State
Case sckClosed: Label1.Caption = " لا يوجد إتصال "
Case sckClosing: Label1.Caption = "قام الخادم بقطع الإتصال "
Case sckConnected: Label1.Caption = "متصل"
Case sckConnecting: Label1.Caption = " يتصل بالخادم "
Case sckConnectionPending: Label1.Caption = "الإتصال معلق"
Case sckError: Label1.Caption = "خطأ في الإتصال "
Case sckHostResolved: Label1.Caption = " تمت معالجة البيانات "
Case sckListening: Label1.Caption = "منصت "
Case sckOpen: Label1.Caption = "الإتصال مفتوح"
Case sckResolvingHost: Label1.Caption = "تتم الآن معالجة البيانات "
End Select
Next State
تم الإنتهاء من العميل .
الخادم :
في برنامج الخادم نحتاج لأداة الوينسوك فقط .
النص البرمجي :
في كود تحميل الفورم :
PHP كود :
Winsock1.Close
Winsock1.LocalPort = 303
Winsock1.Listen
حيث إنه يتم إغلاق كل الإتصالات ، وتم تحديد المنفذ 303 ليكون منفذ الإنصات .
في الحدث Connection_Request للوينسوك :
PHP كود :
On Error Resume Next
Winsock1.Close
Winsock1.Accept requestID
حيث إنه يتم إغلاق جميع الإتصالات ، ويتم قبول طلب الإتصال Accept .
تم الإنتهاء من الخادم . وتستطيع تجربة البرنامج وفحص الإتصال .
يتبع ......
متغيب