الدرس الثاني : الجزء الأول OSI و TCP/IP

عام 0 geek4arab
Spread the love

بسم الله الرحمن الرحيم ,

الدرس الثاني : الجزء الأول

قمنا سابقا بتعرف على أجزاء OSI و TCP/IP وبينا كيفية التعامل مع هذه الطبقات في البرنامج , واليوم سوف اشرح بعون الله كيفية التعامل مع Socket بشكل أكثر تفصيلا بالإضافة إلى استخدام ال Thread في برمجيات الشبكة ..

أولا : ال 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 جديد كما هو في الشكل التالي :

في البداية قم بإضافة النيم سبيسس التالي :

using System.Net.Sockets;
using System.IO;

للإجراء عملية الإرسال لا بد أولا من اخذ اوبجك من الكلاس MemoryStream والتي سوف نستخدمها لتخزين الصورة داخل الذاكرة بشكل Stream لكي نحولها لاحقا إلى مصفوفة Binary ثم إرسالها عبر NetworkStream إلى جهاز السيرفر والذي سأتي على شرحه في الجزأ الثاني من هذا الدرس, انظر الكود التالية :

try
{
تحديد الباث الخاص بصورة
openFileDialog1.ShowDialog ();
string mypic_path =openFileDialog1.FileName;
pictureBox1.Image = Image.FromFile(mypic_path);

MemoryStream ms = new MemoryStream(); 
pictureBox1.Image.Save(ms,pictureBox1.Image.RawFormat); 
تخزين الصورة ووضعها في مصفوفة من النوع بايت
byte[] arrImage = ms.GetBuffer();
ms.Close();
الاتصال بجهاز السيرفر عبر العنوان والبورت المحدد
TcpClient myclient = new TcpClient (txt_host.Text,5020);//Connecting with server

إرسال الصورة المخزنة إلى جهاز السيرفر 
NetworkStream myns = myclient.GetStream ();
BinaryWriter  mysw = new BinaryWriter (myns);
mysw.Write(arrImage);//send the stream to above address
إغلاق السوكت والجلسة واللستريم
mysw.Close ();
myns.Close ();
myclient.Close ();

}
catch (Exception ex){MessageBox.Show(ex.Message );}

تم تعديل بواسطه fmo_82

الكاتب geek4arab

geek4arab

مواضيع متعلقة

التعليقات مغلقة