بسم الله والحمد لله والصلاة والسلام عليك بسم الله
كنا بدنا نتكلم الأسبوع الماضي عن الـ network
programming واخدنا بعض المصطلحات أو بعض المفاهيم
المهمة للشبكات وكان أهمها أن شبكة الـ computer هي
عبارة عن interconnected devices مجموعة من الأجهزة
المتصلة تهدف إلى مشاركة الـ data sources أو الـ
resources اللي متوفرة عليها وقلنا الشبكات بتاخد
physical connection فيها physical connection وفيها
logical architecture في الـ physical connection قلت
أنا في عندها أو سميناها بين جثين الـ topology في
عندنا الـ star في عندنا الـ bus في عندنا الـ ring و
في عندنا الـ mesh اللي بتجمع ما بين الجامعات كلهم
لكن احنا مركزين في الـ .. هان لإن احنا بنشتغل
قاعدين على programming والـ concept اللي بدناياه
اللي بيعنينا هان واحد من التانية إما الـ peer-to
-peer و client-server network الـ peer-to-peer
اللي هي عبارة عن مجموعة من الأجهزة اللي عليها
مجموعة من الـ different resources وكل جهاز قائم
بذاته .. كل جهاز قائم بذاته وبده يعمل مشاركة
للأجهزة الأخرى في مقابل مشاركة هم يعملوها على الـ
resources اللي موجودة وقلنا مشكلة الـ peer-to-peer
أنه لما تكتر بيصير management بدها management أكتر
يعني الآن هضربنا مثلا لو كان في عندي عشر أجهزة
عليها different resources عشر different resources
معناته على كل جهاز أنا بدي أعمل تسعين sharing
للأجهزة الثانية وبالتالي فيها مشكلة مع الـ
management الـ client-server network بجمع كل الـ
service في dedicated computer والـ operating
system لازم يكون support لعملية الـ service ..
server عفوا مشكلتها .. مشكلتها أن لو صار في عندي
fail للـ server معاكتها فقط كل الـ resources اللي
موجودة عندها تمام ومرينا على مصطلحات مهمة بتعنينا
على مستوى الـ programming الـ host هو كل جهاز بياخد
IP address أو كل جهاز موجود على الشبكة وبياخد IP
address وإن كنا دائما بنتكلم بالدرجة الأولى على
جهاز الكمبيوتر لكن ممكن هذا الـ host يكون عبارة عن
router أو fax أو smartphone حسب الشبكة اللي موجودة
عندها كل host موجود على الشبكة له IP address
unique IP address
وقلنا في عندنا domain name system مهم تربط الـ IP
address مع الـ host name واتكلمنا إنه في عند الـ
board الآن الجهاز الواحد ممكن يكون عليه أكتر من
service وهو بياخد IP address واحد على الشبكة عشان
يكون في عندي أكتر من service على نفس الـ IP address
نتكلم على إيش؟ على مصطلح الـ boards وطبعا عدد الـ
boards كبير جدا حوالي 65 ألف board ممكن يكون عندي
على الجهاز المصطلح الرابع والمهم هو الـ Protocol
الـ Protocol هو عبارة عن القانون اللي بيحكم تراسل
أو نقل البيانات بين الأجهزة أو بين الـ hosts اللي
موجودين عنده على الشبكة وشوفنا مجموعة من الـ ..
يعني احنا بيستخدم الـ HTTP الـ Hyper Text Transfer
Protocol بشكل يومي تقريبا، كمان؟ وهذا من أشهر الـ
protocols اللي موجودة وبدينا نتكلم على الـ Network
Programming قدمنا إليها لما أنا بدي أتكلم على
برمجة شبكات بتكلم على أنه أنا بدي أتكلم .. أو
بسميها في الـ Network Programming Security
Programming أو Client Server Programming على الرغم
أن الجهازين ممكن يكونوا مشبوكين ومافيش ولا واحد
يهم Server لكن من ناحية implementation للشغل تبعنا
اللي احنا بتتكلم عليه احنا بتتبع الـ Client Server
Architecture وبالتالي الـ connection عندي أو في الـ
network programming أما أنا بدي اروح باتجاه شغل
اسمه connection oriented تمام؟ أو connectionless
connection oriented يعني أنا بدائما الـ connection
يكون established مائة في المائة وبدي أتأكد أنه
دائما بدي احصل على acknowledgement أن الـ data وصلت
بشكلها الصحيح وطبعا هذا بهمني أنا موثوقية
البيانات أكثر من السرعة من الـ delivery time بينما
في الـ connectionless تمام؟ أنا بدور على الـ UDP
protocol وبهمني بالدرجة الأولى الـ delivery أكتر
من الـ quality تمام؟ تبع الـ data اللي موجودة عندنا
وبدأنا بما أنه الـ network programming يمكن تسمى
socket programming قلنا الـ socket هي عبارة عن end
point نقطة نهاية لإيش؟ of the bidirectional
communication flow يعني بنجوزين هي وصلة استقبال وإرسال
للـ data هي مقطع أو الجزئية الخاصة بإرسال
واستقبال الـ data أو الطرفية الخاصة أو المسئولة عن
إرسال واستقبال الـ data في الجهاز أو في الشبكة اللي
موجودة عندها الآن لو احنا تخيلنا الجملة اللي بإيدي
هذا الآن high socket كل شغلة بتقدر توصليها في
بعضها بشكل محترم
Socket، الآن أحيانا لما بنقطع سلك الكهربا كتير من
الناس بروح بساوي، بروح بلفوا على بعض وهيك وب ..
وبال ..الـ plastic أو الـ tip أو اللاصق الـ
plastic عشان يعزل الكهربا وتمشي الحال لأن هذا
الشغل مش شغل professional الأصل أنه أنا فيه عندي
بعض القطع الصغيرة اللي بقدر أعمل من خلالها التوصيل
وأربط السلك بشكل محترم وأحافظ على سلامتي وسلامة
أهل البيت إلى آخرهم هذه الواصلات الصغيرة اللي
بالشكل هذه اللي تكون مكونة من مقطعين كلها تسمى
socket حتى فيشة الكهربا اللي بنتعامل معاها احنا في
البيوت هي socket والـ socket دائما مقطعين عشان هيك
هي اسمها يا شي Bidirectional يعني بترسل وبتستقبل
وإلا كان سميناها unidirectional لو كانت باتجاه واحد طبعا وإلا
كنا سميناها unidirectional الآن bidirectional معناته أن هذه
النقطة أو هذه الواصلة أنا بدي أشبكها مع الطرف
الثاني مع الـ end point الثانية عشان أقدر أرحل أنجل
بيانات بالاتجاهين بين الأجهزة اللي موجودة عندها الـ
socket هي عبارة عن ميكانيزم أو توفير لقالية من أجل
توصيل البيانات اللي جاية من الـ local device للـ
remote والعكس صحيح يعني هي عبارة عن ميكانيزم to
deliver data to deliver data الآن في مفهوم الـ
socket بدي أفهم كمان أن الـ socket بتخدش الـ data
كلها وبترميها مرة واحدة بدي أرجع معاك خطوتين للخلف
لما تكلمنا عن الـ files قلت أنا في عندي الـ memory
تبع الجهاز والـ application والـ data تبعها
موجودة فيها وفي عندي إيش الـ disk الـ hard disk من
أجل التخزين أقول لها أنا بتعامل مع الـ data chunk
مصبوط وهان بتعامل مع الـ byte أو الـ bit بيت خلينا
نسميها أسهل الـ chunk مجموعة من الـ bytes مجموعة
كبيرة من الـ bytes وهان بتتعامل مع byte بيت طيب
مافيش مجال أنا أرحل الـ data من هيك فكنت بحتاج
لوسيط هان فكنت بروح باستخدم buffered reader على سبيل
المثال عشان أتعامل مع الـ memory as a chunk والـ
buffer reader هذا كنت بقرأه أو بابنيه لما بدي أقرأ
من ملف بابنيه على إيش؟ على file input stream
مظبوط؟
إيش means الـ file input stream؟
كان بتعمل بكتب بالـ bytes يعني بين جثين كنت أنا
بروح أنا كـ application بكتب في الـ buffer بكتب الـ
chunk والـ buffer بيروح بمرر الـ data الـ chunk
تبعته للـ file input stream والـ file input stream
بيصير جدرهم byte byte على مين الـ disk حسب قدرته
تمامًا نفس الكلام الآن لو أنا افترض أن في عندي
جهازين host A وhost B موجودين على الشبكة وفي
بينهم خط physical connection طب ما هو الـ physical
connection كمان له limit بيسميها هنا الـ bandwidth
مصبوط وبتكلم على الـ data transfer rate تبعته قد ايش
بقدر أحسبها طيب تخيلي أن والله أنا ممكن أتكلم على
أن الـ data transfer rate تبع شبكتي 256
kilo byte per second والـ
data اللي أنا بده أرحلها 4 ميجا تقدرش اروح أرمل 4
ميجا مرة واحدة كـ application أنا أنا خلاص الـ data
عندي send يعني send انتهى أمرها طب مين مسئول أنه
يجزألي إياها ويتماشي بحيث أنها تتوافق مع الـ
bandwidth اللي موجودة على الشبكات؟ هذه شغل الـ
socket يعني هو كأنه الـ socket تبع الـ socket هي
صندوق البريد تبعي بيقول اتفضلي هي الـ data بعد هيك
بدها تطلع شوية شوية بدها تطلع كلها حسب قدرة الشبكة
والـ protocol اللي مستخدم أنا ما بعدنيش وبالتالي
هي عشان هي نسميها end point bidirectional
interconnection process الآن الـ data اللي ترسل
طبعا هاروح أنا باتجاه الـ TCP/IP protocol لأنه عندما
أتكلم عن الـ UDP نسميها الـ Data Gram Socket في
الـ UDP نسميها Data Gram Socket نذهب باتجاه الـ
TCP Socket الآن في الـ TCP Socket الـ Data Grant
أو مصطلح الـ Data Grant أن الـ Data تبعتي تتجسم
لمجموعة من الـ buckets نسميها Data Grants حجمها
بيصير بيصير
وغالباً الـ sockets في الموضوع هذا بتتفاهم مع ال
transfer protocol أو مع الـ protocol المستخدم مش
إحنا اتفقنا سابقاً أن الـ protocol هو عبارة عن
الآلية التي تحكم عملية الاتصال أو ترسل البيانات
ما بين الأجهزة من ضمنها جداش حجم الـ data اللي بدها
تبعث أو ترسل من بين الطرفين وبالتالي الـ data
grams هي عبارة عن bucket with finite size with
finite size ليش vary؟ ممكن حجمها يختلف لأن لو كان
اللي عندي أنا واحد
على سبيل المثال فاصلة اثنين من عشرة تلاتة من عشرة
ميجا بايت وبدي أجسمهم على buckets أو data grams
حجمها 256 بايت كيلو بايت 256 كيلو بايت على 256
الواحد ميجا هتكون جداش؟ أربعة packets أربعة دلوقتي
gram packets، مظبوط؟ الألف و أربعة و عشرين، كم 256
فيها؟
ثمانية؟ أربعة،
أربعة packets، طيب، ضال عند التلاتة من عشرة الـ 3 من
10 فهيك صاروا كمان bucket خمسة وظل في عندي تقريباً
نص من مية، تمام؟ هذا بيجيش، يعني مش هيكسكر bucket
كاملة، عشان هيك بيقول إحنا ممكن إيش، تختلف بالحجم
لكن الحجم هذا إيش، finite، محدود أو محدد بشكل مؤقت.
إيش الميزة في التقسيم أو إيش الحكمة من تقسيم الـ
data هنا؟ لأنه هيتكلمنا مع الـ TCP protocol أو مع
الـ connection oriented بهمن لـ quality تبعت الـ data
بهمن الـ assurance إن أضمن إن الـ data وصلت بشكلها
الصحيح وبالتالي أنا مقدرش أرسل البيانات كلها مرة
واحدة وبعدها بيقولوا استلمت كل البيانات لا ما
استلمتش، بدو يرجع لسيرها مرة ثانية، حجمها كبير
يعني بدو .. في عندي data transfer time كبير جداً
لحجم الـ data فإيش الحل؟ الحل صير أبعثها bucket
bucket ومع كل bucket الـ bucket هاي استلمتها صحيحة
ولا مش صحيحة وهو الطرف الثاني بيبدأ يجمع ال
buckets بعد هيك وبيجمع الملف بشكل صحيح وهذا الـ
main advantage اللي موجودة يعني لو صار في loss في
الـ data وضريت أرسل مش هتضرر أرسل كل الـ data هرسل
الجزئية اللي صار فيها loss الـ socket فيها ميزة
ثانية كمان أنها بتعزل الـ programmer عن الـ network
architecture والـ implementation تبعتها كلها إحنا
هنشوف كمان شوية من خلال code أن أنا فعلياً مش
بتعاملش مع شبكات كل اللي بيلزمني أن أكون فاهم مصطلح
الشبكة شو يعني IP address شو يعني port شو يعني
socket وبيصير من خلال الـ socket أعمل create لـ input
stream وoutput stream وكان الله بالسر عليهم و
أصير أكتب على الـ input stream اللي موجود عندي أكتب
وأقرأ زي ما كنت أتعامل مع الملفات تمام وبالتالي
الـ socket isolated programming from details
bucket encoding ولا لسطه كل الشغلات هذه أنت
مابتعنيكيش ولا حاجة فيها الـ socket هي عبارة عن
reliable connection for transmission of data خط
صال موثوق ما بين العناصر الموجودة ولو طلعنا فعلياً
في الـ structure بين two hosts اللي بدهم يتراسلوا
في البيانات أنت هذه الـ application تبعك والنقطة
الزرقاء هي الـ socket
وهذا غالباً محكم بـ Developer أنت كـ برمجر أنت هاني
بتشتغلي وبتعملي الـ connection عشان يكسب منها end
point والجزئية الـ TCP والـ buffer والـ
communication الثانية شغل الـ operating system أنت
مالكيش عليها دخل أحيانا تتدخل بتفضل بتقول بدي أزيد
أو أقل الحجم للـ bucket كـ request والـ operating
system هو في الآخر المسؤول عن كل الـ implementation
كذلك الطرفين الثاني ليش أنا بتكلم الآن على طرفين؟
لأن الأصل واحد فيهم يكون client والثاني يكون
server يعني واحد يقدم خدمة والثاني يستفيد منها إيش
الشغلات اللي ممكن الـ developer يحاول يتعامل فيها
مع الـ TCP protocol الـ maximum buffer وجداش ال
segment size جداش حد من الـ segment أو الـ data
bucket اللي أنا بدي أتعامل معاها بشكل عام ال
secret operations أربع عمليات عملية connection
كنتوا رقم واحد زي ما شوفنا في الـ database
registration connection statement execution بصبت وبعد
هيك الـ fetching للـ data هي نفس الكلام
connection تمام؟ send يعني في عندي output stream،
receive يعني عندي input stream، مظبوط؟ والـ close
وخلصت العملية اللي موجودة عندي بكل بساطة يعني
عندي أربع عمليات المفروض تتوفر في الـ socket أو في
الـ server أو في الـ .. عفوا .. في الـ network
program تطبق العمليات اللي موجودة عندها الـ
connection بتتم من خلال الـ socket الـ connection
بتتم من خلال الـ socket والـ socket constructor
مش بس بينشغلي socket object ولأ بيحاول يعمل اتصال
مباشر مع الـ IP address اللي أنا بدي أحدده مع ال
server طيب إيش الـ programmer اللي بيلزمه عشان
ينشغل socket بيلزمني أعرف مين الـ server اللي أنا
بدي أتصل عليه من خلال اسمه أو الـ IP address وإيش
الـ port الـ service اللي أنا بدي إياها وبدي أعمل
عليها اتصال يعني بيلزمني remote host IP address أو
name وبيلزمني الـ port عشان أتصل معاه طبعاً الـ host
ممكن أستخدم الـ IP address وممكن أستخدم الـ name
تبعتها اسم الـ computer أو أستخدم الـ IP address حسب
الحاجة طبعاً في عندي الـ int address class Int
Address Class بيوفر لي مجموعة من الـ methods بحيث أو
two method بالدرجة الأولى بيشتغل شغل الـ DNS الـ
system بدي الـ IP address وبقول للـ DNS إيش هتلي
الـ name أو العكس صحيح أو العكس صحيح عشان أنشئ
socket بعرف socket الـ class اسم الـ socket new
socket وبزودها زي ما قلنا بشغلتين أساسيات بالـ
Remote IP Address اللي هو الـ Server IP Address أو
الـ Host Name تبع الـ Remote Address بالإضافة للـ
port اللي موجود عندها تعال
نشوف إيش المفروض أو إيش السيناريو اللي بيصير عندها
في الشغل إحنا اتفقنا أن الـ concept تبعتنا Client
-Server Architecture Client-Server Architecture
وأنا بتكلم على الـ socket أو الـ TCP socket هي الـ
server-side وهي الـ client-side المفروض أن الـ
server-side يكون موجود وشغال إيش يعني؟ يعني في
عنده server أو في عنده socket بينشئ socket ويعمل
bind يربطها بالـ port ويعمل listening بناء على
عملية الـ binding اللي صارت الـ client الآن بده يروح
ينشئ socket ويُزودها بالـ IP address ويحاول يعمل
connection connection مع مين؟ مع الـ server بناء
على الـ IP address تبع الـ server والـ port اللي
عمله by him فبعد بعد request لأن والله إذا ال
server هذا عمل accept تمام فبرجع له وبقول okay
accepted accepted معناته okay مسموح لكن أنت الآن
ترسل وتستقبل الـ data وبتصير كل عملية send في
مقابلها receive وكل عملية send من جهة الـ server
هتقبلها receive عند وين؟ عند الـ client وهكذا طيب،
الآن هذا الكلام تماماً زي لو أنت بدك تتصل على
زميلتك باستخدام مثل الـ mobile حطيت رقمها وبمثابة
الـ IP address وحددت الشريحة لو أنت فرض تستخدم جوال
أو موبايل أو وطنية تمام حددت الـ port اللي أنت
بتتصل من خلاله واتصال الآن
لأ أنت حددت رقمها وطنية أو جوال عشان ما ثابت الـ
port اللي أنت عمال بتتصل يا معاها شريحتين أن هي
وأنت عمالك بتحدد على أي شريحة بتتصلي لأن رن الجوال
عندها عندها الحق أن هي accept or reject مظبوط
مشغولة بتعمل cancel المكالمة يعني عملت reject بدها
تكمل الـ conversation أو تبني الحوار معاكي بتعمل
accept وبتبدأ ترسلوا البيانات أتوقع أن في الـ data
تطلع وبتُرسل في نفس الوجات إحنا أحيانا من كتر سرعة
نقل البيانات بنحسها synchronized بس يعني وفي
delay بسيط بسيط جدا لأن الجهاز بدو يستجيب و بدو
يرسل و حسب يعمل ال process في كل اتجاه anyway هذا
الكلام هو اللي بصير هنا حتى في الشبكات الآن بعد ما
بنخلص الأصل أعمل close لكل ال socket اللي موجودة
عندهم ال application تبعي هذا احنا متعودين فيه أن
أنا هنا في عندي input stream من الـ keyboard صح؟
وفي عندي output stream على الـ monitor system. كنت
بتعامل مع الـ Scanner و في عندي System.out و بعمل
البرنت على الشاشة، مصبوط؟ و روحنا احنا لاحقا أضفنا
.. انسيلي هذا المكتوب .. أضفنا ال files و ببني
عليها input stream و output stream عشان أكتب على
ال file و input stream عشان أخد من ال file، الآن
شيلي مفهوم ال file تماما و بتحط مكانه مين؟ ال socket
بدي أحط مكانه ال socket مثال آخر للسكت صندوق البريد
اللي بيكون أو الصندوق اللي بيكون قدام الموظف على
مكتبه فيه رفين صغير صادر و وارد لو روحت عند العميد
أو عند رئيس جسمك بتلاقيه موجود غالبا الآن بيجي
بيكتب بيبعت رسالة بروح بكتب لمين الرسالة بكتب لمين
و بحطها في صندوق الصادر و بنتظر لما بيجي ساعي
البريد بياخدها و بروح بناء على العنوان لمين هدا
رايحة و بحقها وين في صندوق الوارد للشخص تبع المكتب
التاني والعكس صحيح لو كانت الرسائل الجاية وهو نفس
الكلام فأنتي لحد ال socket هيك و تمام معناته أنا
في عندي input و output stream على ال socket و بده
أصير اكتبها أني ايش بصير لاحقا؟ هدم الشغل لل
operating system وبالتالي أنا isolated عنه تماما
تعالى نشوف فعليا ايش اللي لازم يصير لو أنا بدي
اعمل implementation لأن أنا لازم ابدأ بال server
-side اعمله implementation لازم أبدأ بال server
-side ليش؟ لأنه من خلاله بدي احدد ال port اللي
بدي نعمل عليه على listening فبالتالي لازم يكون ال
server available قبل ما كل client طيب بروح بعمل
create لـ socket و بحدد port و عمال بعمل
listening لمين؟ لل request اللي جاية طبعا ال
server في عندي شغل اسمه server socket special
socket اسمه ال server socket تمام و بيعمل
listening تمام إذا إجا request و جبله تمام بروح
بعمل create ل socket جديدة والسكت هادي يعني وكأن
وكأن أنا جبلت اتصالك اروح شبكتك تماما مع مين؟ مع
الخاطر تماما مثل موظف البدالة لو أنت اتصلت من بيتك
أو من خارج الجامعة على رقم الجامعة الاتصال لمين
بيورد؟ بيرد للبدالة تبع الجامعة اللي هو مقسم
الاتصالات الداخلية الآن بقولك اديني الرقم
التليفوني الداخلي عشان احولك على الموظف اللي بدك
فيه اللي هو مثابة ال port الآن بمجرد أنت حددت ال
port أو ال connection بشكل صحيح و established
خلاص أنت صرت على خط مستقل في اتصال مباشر مع ال
target phone وبالتالي الـ Bad guy لسه ممكن تستقبل
كمان مكالمة وتالتة ورابعة وعشرة حسب قدرتها في
المكالمات اللي موجودة وبالتالي كل connection بيجي
بينعمل له data أو socket جديدة عشان تبدأ تقدر تكتب
وتلجأ بيانات لأن ال server socket هذه ما بترسلش و
مابتستقبلش بيانات ال server socket ما بتستقبل ولا
بترسل بيانات مهمتها بس تعمل listening لل income
request طيب وبعد هيك معناته أنا في المرحلة هذه بدي
أنا بهمني ال client صار هذا جاهز بغض النظر ايه ال
processing اللي بده يصير فبيجي بدور ال client بنشي
عليه socket و بحدد لل socket هذه ال host ID اللي
موجود مع ال server و ال port اللي أنا حددته عشان
ايه قلت لك ال server لازم يكون موجود قبل و شغال
عشان أقدر أطلب request بعد هيك و بروح بطلب
request الـ request هاد بتيجي لمين؟ للـ server
socket في حالة ال waiting اللي بتنتظر أي request جبلته
عاملة establish ل connection معناته هتروح هي تعمل
generate هنا ل connection و يصير في عندي real
communication لان ما بين ال socket تبعت ال client
والـ socket الجديدة اللي أنشئها الـ server طب و ال
server شوكة ال socket اللي موجودة سابقا هتظل
موجودة تسمع أو تنتظر أي income request تاني و بتظل
هذا established ما بين ال two circuits لحد ما
يطوله أنت أخذت BHP صح؟ لأن ال site تبعك كم
session ممكن يفتح؟ كثير حسب قدرية ال server السيرفر
socket هذه ممكن أنا احدد لها عدد ال session عدد ال
connection جديدة حجم ال queue تبعتي لو أتينا .. أنا
حددتها عشرة و أتينا 11 connection واحد منهم هضلاش
يعمل wait مش هينجبل لحد ما ال connection تبعتي
يعني بين جثين بصير بقول أن السيرفر socket تبعتي هذه
تقدر تعمل generate لعشرة sockets أو عشان يتخاطبوا
مع عشرة clients مختلفين تعال نشوف ما يمكنني
استفيده من الـ socket قبل أن أشاهد الـ code في
الآخر الـ socket هي ال constructor بياخد ال host
name و بياخد ال port من خلال ال socket object أنا
في عنده two methods get input stream و بترجع لي
input stream object تمام؟ و get output stream و
بترجع لي output stream object تمام؟ احنا لما بجينا
نعرف buffer write reader
أنا راح أقول له new file input stream وطبعا هذا
كان يأخذ من ال object تبع ال file مظبوط؟ ال file
object ولما بتعامل مع ال buffer writer نفس الكلام
ال buffer writer أبني على file output stream على
الفايل اللي موجود عندي نفس الكلام وبالتالي أنا
حصلت اللي بدي أنا من ناحية كتابة ال data وخلصتها
السيرفر سوكيت
صحيح طب الحين أنا جزدك الحين لو كان عندي أكثر من
client أنه بتتعامل مع client واحد ولا ال session
هيكون أكثر من ال client عشان .. اه لا ايوا هو
مفهومة كم session بده يفتح هي كل session بتمثل
مين؟ client كل session بتمثل client وبالتالي لما
أنا بقوله أنا بدي اعمل عشرة sessions كحد أقصى يعني
أنا باختصار عشرة clients كحد أقصى هي اللي هي
المفهومة وبالتالي ال server socket handle أنا بتكلم
على عدد ال clients أو كل ال sessions اللي ممكن
أفتحها بس الآن في مفهوم الـ Client-Server
Programming كل session تساوي client وكل client
يساوي session و ال session تساوي وقت معالج و سبيس
في ال memory عشان هيك لازم تكون limited ال
connection socket اللي
في الرسم هنا ال connection socket هي عبارة عن
socket من هذه تمام؟ نفس النوع by directional عشان
تصير في عندي data هادي ما بترسلش ولا بتستقبل data
الآن هاديش مهمتها تستمع لل request اللي جاي من عند
ال client إذا عملت له accept تعمل connection socket
من نفس نوع هادي عشان تقدر ترسل .. تتنسل و تتخاطبوا
مع بعض لأ
مش ضروري بحل أنه يعني ال client هذا إذا ممكن يعمل
أكثر من connection الـ Client الواحد أكيد لأ لأنه
في الآخر أنت اللي application شوفي أنت الآن بالـ
Java لو أنت .. أسألني مثال مع ال graphical user
interface عندك عملت برنامج بسيط بعمل form معينة
وشغلتيه مرة واثنين وثلاثة أو أربع أو خمسة أو ستة
تمام؟ لأن كل ال .. كل المرة شغال قدامك على الجهاز
مظبوطا لأ كل واحد فيهم عبارة عن session مختلفة
لأنه أخذ وقت من وقت المعالج و memory من memory
الجهاز غير عن السابق وبالتالي أنت لما بتعمله م
closed بتعمله م closed كل واحد بشكل مستقل، بظبط؟
لأن هنا نفس الكلام كل client هنا بيشتغل بيعمل
request هو عبارة عن new completely client حتى لو
كان نفس ال application و أنا المرة الجاية احنا
اليوم مش هنشغل عملي احنا هنقفل المفهوم كله نظري و
نطلع على الكود المرة الجاية بنشغل فيه عملي هتروح لي
أن في كل مرة بشغل ال code تبع ال client أنا بعمل
request على نفس ال server بيعتبر أن هنا في عندي
request جديد و بيعمل سكة جديدة ب port جديد عشان
يصير ال connection من خلال ال port الموجود
ما هي اللي بنقوله، كل client فيقوله connection
socket ممكن أكثر من connection و socket كله لنفس
ال client؟ لأ لأ طب مش هو كل طلب من ال client؟
ممتاز ال client كم مرة بيعمل الطلب؟ يعني أصلا طلب
تاني؟ شوية، بس أصفر شوية، الآن وأنت قاعدة بتحكي
على التليفون، على الجوال لو حاولتي تروح تعمل ايه؟
كمان مكالمة واتصال، ترضى؟
ليش؟ لازم تسكر المكالمة لأنه أنت الآن already ك
client عندك بس الإمكانية تعمل associate لمدة
مكالمة واحدة الآن مع الـ smartphone واللي بيكون
عليه شريحتين طبعا بس ما يحكيش يعمل المكالمة بس ممكن
يخليك تستقبل مكالمة ثانية وتحط الأولى في ال
weight، فتح لك two different sessions مفتوحات الآن
وهذا هو نفس الكلام اللي بيصير عندك هنا الـ client
هو one session وكل client له request واحدة فقط لو
أنا رحت كمان مرة في الكلام الكويس لو أنا رحت
شغلت برنامجي عشر مرات مختلفة معناته أنا عملت عشر
clients مختلفين، مالهاش داعي لأن كل connection
بمثابة session و client مختلف. طيب، الآن قلنا لـ
input stream والـ output stream خلصنا عليهم من عند
الـ server socket الـ server socket وأهم
constructor لازم ياخد من مين؟ الـ board ال
constructor الثاني ممكن يدّي الـ board والـ maximum
number of connections، الـ method accept هذه بترجع ب
object منه إيش؟ socket اللي كانت موجودة وين؟ اللي
كانت موجودة عند الـ client طبعا؟ طب وعشان يعمل
عليها connection إيش بيلزمها؟ بيلزمها الـ host و
بيلزمها الـ board، من أين جابهم؟ مش شغل الشبكات هذا
الآن لأن كل رسالة جايانة من الـ client بتحمل الـ IP
address والـ board اللي اتصل عليه فهو بياخد و
بيقول اتفضل هاي الجهاز اعمل connection على ال
board، والسوقة اللي موجودة عندي هان بدي احاول بدي
اعمل zoom out، zoom out للـ code اللي موجود عندي هان
الـ mouse ماله؟
مش راضي؟ ليش طيب؟
بلاش نشتغل بالطريقة اللي أصعب هذه
الـ server-side تعالى نشوف إيش بدأنا في code هنا
عرفت socketServer زي ما قلت هان أنا بنيت المقسم
تبع الاتصالات تبع جهازي تبع الـServer الآن وحددتله
الرقم 6,7,8,9 الـ Board هاي الـ Board بيعمل
Listening الآن أي Client .. أي Client عشان يتصل
على الـ Server هذا بلزمه شغلتين بلزم الـ IP
Address أو الـ Host Name واحدة من الاثنتين والـ
Board الآن
الـ port هاي محدد عندي 6,7,8,9 أو الـ IP address حسب
حسب الجهاز، حسب إيش اسم الجهاز إذا أنت بتشتغل على
نفس الجهاز زي ما أنا بجرب عندي في البيت وعلى جهازي
1,2,7,0,0,1 احنا بنسميه loop back IP address أو ال
local host IP address، كما هدف يظل يعمل listening
for any income connection، فلازم تظل في infinite
loop لازم تظل شغال في infinite loop، while true
الآن while true معناته الـ code هذا هتظل شغال و
واقف هنا متى بنفذ الـ code اللي تحت؟ لما يصير فيه
request وينعمله accept طبعا احنا مش عاملين ن
reject هنا لأي request، أي request بيجي من هنا
نعمله accept مباشرة، الـ accept راح ت .. إيش عملت
ليه؟ سكت تمام؟ Communication socket اللي هي ال
socket اللي احنا عرفناها، القانع يعني بين جسين هيك
تخيل هي الـ client عنده socket هيها من ثلاث مداخل
على فرض هيك وهي
الـ server، الـ server هي الـ server socket أشبه
بالودن وجاعداش بستنى الاتصالأتجى الـ request قال
okay أنا بدي اتصال، عمل accept وروح
بنشقلي الـ socket هان بالشكل
هذا وبقول يوصل معايا هيك وهذه خلصنا من هيك انتهى
القمر، اتحررت قاعدة بتعمل lesson لأي income request
ممكن الـ client ثاني يعمل request فبروح إذا accept
بروح بنشيله كمان socket مناسب إليه، بروح بحطهم في
اتصال مع بعض من أجل نقل البيانات، تمام الـ socket
معناته الـ method dot accept، تمام، الآن أنا بدي أبني
input و output reading بالمثال اللي أنا جايبه، بدي
أؤكد على الشغل ثاني ممكن تقراه text وممكن تقراه
binary، احنا شوفنا مع الـ file شوفنا في الكتابة على
الملفات كان في عندنا buffered writer وفي عندنا print
writer وفي عندنا output stream لنص، الـ text كان
في المقابل في عندي data output stream للـ binary
للقراءة كان في عندي الـ buffered reader والسكانر
والـ file input stream للـ text، في المقابل كان في عندي
data input stream عشان يتعمل input لـ binary data
على الـ file نفس الكلام أنا كهان عامل إيش بساوي وجبت
المثال متعمد أو متعمدين هيك عشان نوضح لك إن كل
عملية قراءة هان هتكون عملية كتابة من الناحية
الثانية والعكس صحيح، عرفت buffered reader، الـ new buffered
reader، طب الـ new buffered reader بدها تنبني على
input stream، الـ input stream هي اللي عرفت input
stream وحددتله الـ source تبعتها الـ socket client
-socket.git input stream، يعني الآن صارت ال
buffered reader هدي له الـ chunk تمام؟ أنا بقدر
أكتب وأقرأ منها chunks، هتوصل الـ data لمين؟ لل
socket dot input stream اللي موجودة عندها اللي هو
بجيت الـ code هذا get
input stream تمام؟ الآن عرفت الـ data output stream
out to
وبعد هيك السيرفر يعني في المرحلة هانعمل الـ process
المفروض وبعد هيك بيروح أكتب على السكت عشان أرد
السير للـ client اللي موجود عندي تعالي بس الـ code
أصلًا حدا هيك أنا مجرد عرفت الـ input والـ output
إيش راح نسوينا بعد هيك اللي أنا عرفته هان buffered
reader، مظبوط الـ buffered reader
خدت الـ String وهي الـ buffer دي اللي هي in from
الـ client read line، طب ما احنا شفنا ممكن اعمل
while كمان لما كان في عندي multi line ممكن أنا
أقرأه، طبعا هان احنا إننا نبرسل بس one line، عملنا
process هيه، والـ process اللي أنا عامله هو بشكل
بسيط بس حولت الـ string هذا لـ capital letter تمام؟
جاهز بقدره اعمل send، الآن السيرفر بدأ يعمل send
لمين؟ للـ client output dot output client dot بما
إنه أنا عرفته write output stream، فروحت استخدمت ال
method اسمها write bytes وديته الـ response text
اللي موجود عندها، خلصنا و closed، المفروض هذا ال
application ينعمله run وينتظر income request، تعالى
نشوف عند مين؟ عند الـ client إيش بده يكون موجود؟ هي
نفس الكلام عند الـ client، بدأت عرفت مين؟ عرفت ال
socket وحددتلها الـ ID address تبعت الـ server وال
board اللي احنا بنعمل عليه listening في ال
application تبعنا لأن الـ server شغال وتذكر ال
structure تبعته بشكل كويس، وعرفت input و output
وعرفت input و output بناء على الـ socket اللي عندي
هنا بنفس الكلام الـ data output، يعني أنا بدي أكتب
للـ server، out to server بناء على data output ال
stream، و buffered reader عشان أنا بدي أقرأ من ال
server، هاي الـ sentence سمعته سلام from client، أول
خطوة الـ client يسويها في الـ connection راح بعت
output to server اللي هي هذه اللي هي على الـ output
stream تبعية الـ socket اللي موجودة عندها، أكتب ال
sentence، فرح بعت الـ sentence فمقابلها كان مباشرة
الـ server in from client dot read line هذه كانت
مقابل الـ statement هذه بالتمام في الـ code كنت
بحطها مثلًا في الـ string اسمه str، أخذنا الـ str
عملنا uppercase وردناها من out to client dot
right bytes، والـ response فمقابلها تمامًا كنت عمالي
أنا باخد الـ input from server اللي هو ال buffered
reader dot readLine، هيك الـ process بتكون ناجحة 100%
كل عملية قراءة بتكون سبقها بعملية كتابة من الطرف
الثاني والعكس صحيح، والعكس صحيح وبتظل العملية لأن
أنا بدأت أدخل على سبيل المثال في الـ chat لو بدأت
أعمل برنامج الـ chat، إيش اللي بدو يصير هدول
الجملتين بدهم ينحقوا في loop وعالـ client وعال
server برضه بيكونوا موجودات في loop عشان تظهر
العملية عشان تظهر العملية عشان تظهر العملية عشان
تظهر العملية عشان تظهر العملية عشان تظهر العملية
عشان تظهر العملية عشان تظهر العملية عشان تظهر
العملية عشان تظهر العملية عشان تظهر العملية عشان
تظهر العملية عشان تظهر العملية عشان تظهر العملية
عشان تظهر العملية عشان تظهر العملية عشان تظهر
العملية عشان تظهر العملية عشان تظهر العملية عشان
تظهر العملية عشان
أفحص الـ buffer و حسب الـ بن كتب فيه أبدأ عملية
القراءة و لا أعمل كتابة يعني دائما أفحص الـ buffer
فاضي و لا مليان و أصير إيش إما أعمل عملية الكتابة
أو أعمل عملية القراءة بالـ if الـ switch statement
أو حسب بعد ما بخلص بعمل close طبعا الـ file ليش
هتعقيد طيب أنت مستخدمة واحدة that واحدة binary و
واحدة ياش الـ text واحدة binary و واحدة text بس مجرد
أن أقول لك أن احنا متعاملين فيها handmeth الـ handmeth
الفايل الأصلي في البرنامج يكون بالشكل البسيط هذا يعني
أنا أعرف فوق buffer reader و أعرف buffer writer من
أجل الكتابة مش هتفرج معاكي ولا حاجة و طبعا بالـ
buffer reader زي ما شوفنا مع الـ file بعرف string
line وبعمل while عشان أكون في عندي أكتر من سطر أو
ممكن إذا بدأ أقرأ كلمة كلمة أو character character
بالـ method read الأمر متروك إليك تماما إيش تعمل
implementation كذلك لما أنا بدي أكتب بدي أكتب dot
write بيت write byte بدي أكتب النص مباشرة buffer
writer هي.write هيك الـ method اللي احنا أخذناها
وإن شئتِ تستخدمي print write مافيش عندك مشكلة كمان
الفكرة وين أنه خلاص هصير أنا أتعامل مثل وكأني
بأتعامل مع مع ملف هصير أتعامل وكأني بأتعامل مع
ملف بعد هيك ما بخلص و بنسكر الـ code اللي موجود عندنا
أيه الآن كذلك لو أنا بدي كتابتي وقراءتي كلها تكون
binary data هصير أعتمد على مين على الـ Data Input
Stream والـ Data Output Stream مثلًا أنا كنت بدي
أكتب Double أو أقرأ Double لأن هذه ميزات الـ Data
Input Stream والتي بصير أنا بكتب حسب الـ Data Type
اللي موجودة عندي طبعًا الـ .. ممكن .. احنا نحتاج ..
يمكن يحتاج Multithreading المفهوم أنه أنا بدي أصير
الكود السابق هذا لو كان في جملة الكتابة هذه كنت
أنا بأخذ من ملف كبير حجم مثلًا 5 ميغا معناتها هو مش
هيخلص من هان وينتقل لهدي إلى إيش طيب طب إجاني
request جديد الـ request هيدل واقف هاد في الـ server
عفوا هيدل واقف هان لإنه عماله قاعد يبقى يقرأ يعني
هو لازم يخلص هذا ويكمل إيش يرجع للـ while عشان
يعمل الـ you accept إيش حلها عشان يخلّي كل الـ
session يبدو يشتغلوا بدي أستخدم الـ multitrading
اللي هنبدأ فيها المحاضرة أو الدرس الجاية الموضوع
اللي جاية عشان أعمل multi-threading بحيث يكون في
عندي زي هيك الـ client worker بدي يعمل implement
لشغل اسمه runnable وهو أنا بدي أعرف في الـ client
أن في عندي أيه الـ thread و أخلي الـ thread يشتغل
هيك عشان أصلا أصلا أخلي كل session أو كل clients
اللي دي يجوا يشتغلوا أيشوار بعض يشتغلوا في نفس
الوجود إن شاء الله تعالى هي كانت أخلصت تقريبا من
كل الشغلات اللي بدنا إياها الشبكات بضل إن إن شاء
الله المحاضرة اللي جاية بنحاول نشتغل شغل عملي عشان
نورّجيكي بعض الشغلات المفصلية اللي لها علاقة
بالشبكات وكيف ممكن تتجوزيها إن شاء الله تعالى، في
أي سؤال يا بنات؟ الله يعطيكوا العافية