مقدمة في الـStreaming والـThreading -برمجة شبكات - سي شارب - مقـــالات - Top Coder
Welcome to our Site
الدخــول Or تسجـــيل
الخميس
2016-12-08
4:58 PM
تسجــــيل | دخـــول
الرئيسية » مقالات » سي شارب

مقدمة في الـStreaming والـThreading -برمجة شبكات
مقدمة في الـStreaming والـThreading

 مقــدمه
قمنا سابقا بتعرف على أجزاء OSI و TCP/IP وبينا كيفية التعامل مع هذه الطبقات في البرنامج , واليوم سوف اشرح بعون الله كيفية التعامل مع Socket بشكل أكثر تفصيلا بالإضافة إلى استخدام ال Thread في برمجيات الشبكة ..
Sockets
أولا : ال Socket : قلنا سابقا أن السوكت هي الأداة التي يتم نقل البيانات من خلالها من جهاز إلى أخر ولاستخدامها يلزم في البداية تعريف النيم سبيس System.Net.Sockets حيث يحتوي هذا النيم سبيس على عدد ضخم من الكلاسس والتي يتم استخدامها في برمجيات الشبكة , انظر الرابط التالي لتعرف على جميع المكونات في التفصيل :
http://msdn.microsoft.com/library/default....mnetsockets.asp
و الرابط التالي لتعرف على مكونات System.Net بتفصيل:
http://msdn.microsoft.com/library/default....rfsystemnet.asp

يمكنك السوكت من نقل Text او Object ,حيث بينا سابقا كيفية التعامل من السوكت لنقل Text وفي هذا الدرس سنبين كيفية التعامل معه لنقل Object , وكما هو الحال في نقل ال Text كنا نحول التكست الى اسكي ثم الى باينري اما في الأبجكت فيتم التعامل معه باستخدام ال Stream Library والتي يتم الوصول اليها من System.IO وتحتوي هذه المكتبة على Binary Reader و Binary Writer تمكنك من التعامل مع أي Object انظر الصورة المرفقة :



حيث تساعدك هذه المكتبة على تحويل أي اوبجكت إلى باينري باستخدام Binary Reader لتسهل إرساله عبر الشبكة باستخدام Network Stream ثم تحويله مرة أخرى إلى اوبجكت باستخدام Binary Writer , وكمثال تطبيقي على هذا سوف نقوم ببناء برنامج يقوم بعملية نقل الصورة من جهاز إلى أخر Client/Server وللبدء قم بإنشاء New Form جديد كما هو في الشكل التالي :



في البداية قم بإضافة النيم سبيسس التالي :
System.Net.Sockets
System.IO

للإجراء عملية الإرسال لا بد أولا من اخذ اوبجك من الكلاس MemoryStream والتي سوف نستخدمها لتخزين الصورة داخل الذاكرة بشكل Stream لكي نحولها لاحقا إلى مصفوفة Binary ثم إرسالها عبر NetworkStream إلى جهاز السيرفر والذي سأتي على شرحه في الجزأ الثاني من هذا الدرس, انظر الكود التالية :  
 
الجزء الثاني
سوف ابدأ في هذا الجزء شرح الجزء الخاص بالسيرفر والذي يقوم بعملية التصنت على البورت واستقبال ال Stream عبر ال Binary Reader وتحويله إلى اوبجكت مرة أخرى , في هذا المثال نريد استقبال صورة وليس شيء أخر وفي هذه الحالة وفرت لدينا الدوت نيت خصائص جديدة في ال Controls الموجودة فيها ومن ضمنها خاصية Image.FromStream الخاصة ب ال PictureBox والتي تسهل علينا إمكانية عرض الصورة المرسلة من خلال Stream لكي يتم تحويلها من Binary Stream إلى صورة تعرض على ال Picturebox انظر المثال التالي :
 
 
ولتطبيق قم بإنشاء New Form جديد كما في الشكل التالي :



أضف الميثود السابقة في كلاس البرنامج ثم قم باستدعائها بواسطة وضع Image_Receiver()اما في ال Constructer الخاص بالبرنامج أو بحدث بدأ التشغيل الخاص بالفورم , وقم بوضع الميثود التالية في حدث Closing الخاص بالفورم :
Form1_Closing
 
وذلك لتأكد من إغلاق السوكت عند إنهاء البرنامج ,..

قم بإضافة الكود التالي الى ال Save لكي تتمكن من تخزين الصورة المستقبلة  
menuItem1_Click
 
قم بتشغيل البرنامج الآن ...
ماذا تلاحظ !! لقد لاحظت أن البرنامج بطيء جدا لدرجة لا يمكن فيها فتح أي برنامج أخر , فكر بالسبب ..
لن أترككم تفكرون كثيرا كون أن ذلك قد يؤدي إلى تعليق الجهاز بالكامل وخاصة إذا لم يتوفر لديك الحجم الكافي من ذاكرة الرام او إذا كان المعالج لديك بطيء نسبيا .. السبب في ذلك اللوب الذي لا ينتهي وعملية التصنت على البورت والتي لا تنتهي أيضا حيث أن البرنامج يعمل على الجزء العام والمخصص لإدارة نظام التشغيل في المعالج وهذا يعني انه لا يوجد مجال لفتح برنامج جديد إذ أن الموارد جميعها محجوزة , إذا ما هو الحل ....
لقد وفرت الدوت نيت الحل لهذه المشكلة وهي باستخدام تكنولوجيا ال Threading والتي تسمح بالمعالجة المتوازية على نفس المعالج وذلك من خلال تقسيم المهام على المعالج وعمل Session منفصلة لكل برنامج وهو ما يسمى بال Multitasking.. وهنا لا يؤثر البرنامج على موارد النظام بشكل كبير انظر الشكل التالي :



لاحظ انه قبل اضافة ال Thread كان البرنامج يعمل على منطقة ال Global Area وهذا هو سبب البطء الشديد وبعد استخدام ال Thread تم عمل Session خاص للبرنامج بحيث يعمل بشكل متوازي مع بقية البرامج ..
ولاستخدام ال Thread في البرنامج يلزم أولا تعريف المكتبة او انيم سبيس الخاص به وهو
System.Threading

ثم قم باشتقاق اوبجكت منه وادرج اسم الميثود الذي تريد عمل Thread له كما يلي : اكتب هذا الكود في حدث بدأ التشغيل للفورم Form1_Load
 
 
ألان قم بإضافة Application.ExitThread في حدث ال Closing Form كما يلي  
Form1_Closing
 
ميزة ال Thread رائعة جدا اذ تمكنك من تشغيل اكثر من Thread وفي نفس الوقت وفي نفس البرنامج وهو ما يسمى بال Multithreading والذي سأتي على شرحه لاحقا بإذن الله .... انتظرونا في الدرس القادم .. أتمنى منكم التطبيق.  
المصـــــــــــدر
 Written by :  Mohammed Mahmoud
الفئة: سي شارب | أضاف: ham_mody2000 (2011-10-20 2:22 AM)
مشاهده: 6251 | الترتيب: 0.0/0


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

تعليقات مشتركي الموقع

مجموع المقالات: 0
إضافة تعليق يستطيع فقط المستخدمون المسجلون
[ التسجيل | دخول ]
طريقة الدخول
بحث
Our Facebook community

تم إطلاق صفحة توب كودر على الفيس بوك

Advertisment
الأحـــدث
hitstatus
Copyright Mohammed Mahmoud © 2016
إنشاء موقع مجاني с uCoz