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

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



لإجراء عملية الاتصال بين Client و Server يلزم ما يلي :

في الجهاز المرسل Client :
1- تبدا عملية توليف الرسالة المرسلة في ال Application Layer ووظيفتها هنا التعامل مع الرسالة نفسها وتحويلها من صيغة نصية الى Data يمكن ارسالها عبر الشبكة , ففي برمجيات الدردشة Chat يتم تحويل النص المكتوب الى ASCII Code ثم يتم تحويل هذا الأسكي الى مجموعة من Binary Code توضع في مصفوفة لتجهيزها وارسالها عبر Socket (بقية الطبقات) وهنا توضيح هذه الخطوة في الكود
كود
String str=Console.ReadLine(); // كتابة الرسالة هنا ووضعها في متغير من نوع ستريغ
ASCIIEncoding asen= new ASCIIEncoding(); // تحويل النص المكتوب الى الأسكي
byte[] ba=asen.GetBytes(str); //تحويل الأسكي الى باينري كود وتخزينها في مصفوفة من النوع بايت


في نموذج osi يتم تقسيم ال upper Layers الى ثلاثة طبقات
Application لتعامل مع البرنامج نفسة او ما يسمى user interface
Presentation تمثيل البيانات المرسلة وهي كما ظهرت سابقا بتحويل البيانات الى الASCII
Session وفيها البدأ بعملية التخاطب بين الجهازين و التعريف ببعضهم البعض( فتح الجلسة) والتي سأتي على شرحها بعد قليل
اما في بروتوكول ال TCP/IP فكتفى بوجود طبقة Application والتي تقوم بعمل الطبقات الثلاث الأولى في OSI
في session Layer يتم التعرف وفتح الجلسة بعدة خطوات وهي كما يلي :
1- اجراء الإتصال المبدئي بجهاز server عبر ال IP و البورت المحدد وذلك بعد تحديد عملية الإتصال سواء عبر UDP او عبر TCP
2- التعريف بنفسه وعمل ال Authentication اذا تطلب جهاز السيرفر ذلك
3- قبول او رفض الجلسة ويتم ذلك بإرسال الموافقة على فتح الجلسة او رفضها
4- بدأ الجلسة وقيام السيرفر بعمل Listening على البورت الخاص بالبرنامج

عندما يتم الموافقة على فتح الجلسة والبدأ بعملية التخاطب يقوم جهاز المرسل Client بتحميل الرسالة الى الطبقة الأخرى وهي هنا طبقة Transport وفي هذه الطبقة يتم تحديد طبيعة الإتصال سواء عبر TCP - Connection Protocol او عبر ال UDP - Connectionless Protocol ففي البروتوكول الأول يتم تحديد طرفين وهما المرسل والمستقبل وبورت الإتصال اما ال UDP فيتم تحديد الطرف المرسل و المستقبل (اختياري) اي انه يمكن عمل ال Broadcast بدون تحديد جهة معينة لأستقبال الرسالة اي ان اي شخص يقوم بتنصت عبر هذا البورت Listening يستطيع استقبال الرسالة , وهنا مثال يوضح عمل هذه الطبقة
كود
TcpClient tcpclnt = new TcpClient(); // اختيار برتوكول التي سي بي لعملية الإتصال
tcpclnt.Connect("192.168.0.2",8001);//حيث يلزم تحديد الطرف مستقبل الرسالة والبورت المخصص

ولارسال الرسالة عبر الشبكة نستخدم في الدوت نت ميثود جاهز يقوم بهذه العملية ويسمى Network Stream وهو المسئول عن التعامل مع وسيلة الإتصال وارسال الرسالة الى الطرف المعني بشكل Stream Data او بستخدام ال Socket نفسه وكمثال على ذلك:

كود
NetworkStream mynetsream = tcpclnt.GetStream ();
StreamWriter myswrite = new StreamWriter (mynetsream);
myswrite.WriteLine("Your Message");

وبعد ذلك تسلم الى Network Layer وهي مكون من Datalink Layer و Network Layer في OSI
طبعا يتولى نظام التشغيل و بروتوكول TCP/IP ارسال الرسالة عبر الشبكة
وهنا ملخص عمل كل من Network Layer و DataLink Layer
كود
Network layer :
Layer 3 of the Open Systems Interconnection (OSI) reference model for networking. The network layer is responsible for functions such as the following:
- Logical addressing and routing of packets over the network
- Establishing and releasing connections and paths between two nodes on a network
- Transferring data, generating and confirming receipts, and resetting connections
Example about network layer : IP-internet protocol , ICMP -internet control message protocol , Routing
DataLink layer: The link layer provides physically means Example : ARP Address Resolution Protocol , RARP Reverse Address Resolution Protocol.


وبهذا قمت بشرح كيفية الإتصال عبر Layers .
اما بنسبة للجهاز المستقبل Server يقوم بالمرور على نفس الطبقات ولكن بالعكس حيث يستلم كرت الشبكة البكت لتحول الى Datalink ثم Network ثم Transport ثم Application ومنها تحول من Binary الى Ascii ومن Ascii الى Text .. وهذه الكود يوضح مبدأ عمل ال Server
كود
TcpListener myList=new TcpListener("127.0.0.1",8001); // تحديد البورت والأي بي الخاص بسيرفر والذي سيتم التنصت عليه
myList.Start();// البدأ بعملية التنصت
Socket s=myList.AcceptSocket(); // قبول اي طلب يأتي لفتح جلسة جديدة عبر السوكت

byte[] b=new byte[100];//تكوين مصفوفة لأستقبال الرسالة
int k=s.Receive(b); // البدأ بلإستقبال والتحويل من الباينري الى الأسكي
for (int i=0;i<k;i++)
Console.Write(Convert.ToChar(b[i])); طباعة الرسالة بعد تحويلها من اسكي
s.Close(); اغلاق السوكت


في الدرس القادم سوف نتحدث بإذن الله بشكل اكثر تفصيلا عن السوكت وعن Threads وعذروني على عدم التفصيل ببعض الأمور وما ذلك الا بسبب ضيق الوقت ..الباب الأن مفتوح لنقاش واتمنى ان ارى منكم التفاعل ... انتظرونا في الدرس القادم