اساسيات مكتبة Socket سوف نشرح اليوم عن مكتبة مهمة في لغة بايثون و هي مكتبة socket الخاصة بالشبكات, يجب أن يكون لك خبرة في اساسيات لغة بايثون طريقة تحميل مكتبة socket لتحميل المكتبة على نظام windwos نقوم بفتح موجه الأوامر cmd. ثم تقوم بكتابة الأمر pip install sockets ليتم البدء بتحميل المكتبة لدينا عند الإنتهاء. بنفس المبدأ يتم تحميلها على نظام لينكس بكتابة الأمر نفسه في تيرمنال و ننتظر انتهاء التحميل. مفهوم الـ Socket هذا المصطلح في اللغة العربية يعني مقبس يقوم بالربط بين شيئين بشكل عام, و لكي نفهم هذه النقطة بشكل صحيح "تخيل معي بأن لمبة كهرباء في غرفة و تكون مكونة من سلك كهربائي منسدل من سقف هذه الغرفة و متصل في هذه اللمبة و يتوسط بينهم قطعة تسمى 'سوكة' و هي التي تربط بين السلك و اللمبة لكي تمد هذه اللمبة بالتيار الكهربائي لكي تضيئ" هذه السوكة نعتبرها مكتبة socket. أما الـ socket برمجياً في موضوعنا في هذا الدرس سيكون لربط برنامجين مختلفين بإتصال مباشر لنقل و إرسال البيانات. الـ server نقصد به الخادم الرئيسي الذي يستقبل العملاء Clients و يصدر لهم الأوامر لكي يقوموا بتنفيذها, يجب أن لا نخلط بين مصطلحي السيرفر و الباتش. الـ Client نقصد به العميل المستقبل الذي يقوم بالإتصال في السيرفر و يستقبل منه الأوامر و يقوم بتنفيذها. إستدعاء مكتبة socket نقوم بإستدعائها ببداية البرنامج بالأمر import socket ثم يكون بعض الميثود موجودة و هي : الـ address family : طريقة كتابة العناوين الخاصة في البرنامج, و اكثر الطرق المستخدمة في هذا هو الـ AF_INET و يعني العنوان الخاص في البروتوكول بإصداره الرابع Ipv4 و الـ AF_INET6 العنوان الخاص في البروتوكول الإصدار السادس Ipv6. البروتوكولات Protocol هي مجموعة من القوانين و الإجراءات التي تستخدم للإتصال و تكون مهمتها تحديد القوانين و الإجراءات التي تتحكم بالإتصال و التفاعل بين أجهزة الكمبيوتر المختلفة على الشبكة, و هنا بعض الأمور التي تتعلق بالبروتوكولات و هي : إختلاف الكثير منها في عملها ووظيفتها. من الممكن أن تعمل عدة بروتوكولات معاً لتنفيذ عمل ما. لكل بروتوكول مزايا و عيوب .. البروتوكولات الأكثر إستخداماً على الشبكة العنكبوتية هي Tcp و UDP. مميزات و عيوب البروتوكولات سوف نتحدث هنا عن البروتوكولين الأكثر إستخداماً و عن مزاياها و عيوبها. بروتوكول TCP مميزات SOCK_STREAM إن بروتوكول TCP هو بروتوكول مبني على الإتصال connection-based و يوفر آلية لتصحيح الأخطاء و ضمانة لتسليم البيانات عبر ما يعرف بالتحكم في الجريان flow control و يحدد التحكم في الجريان, متى يجب إيقاف نقل البيانات و إعادة إرسال الرزم التي أرسلت سابقاً و التي واجهت مشاكل كالتصادمات collisions إذا أن التأكيد على الوصول الدقيق و الكامل للبيانات عبر بروتوكول TCP هو أمر جوهري في عملية تبادل البيانات المهمة كالتحويلات في قواعد البيانات. بروتوكول UDP مميزات SOCK_DGRAM بروتوكول UDP هو إختصار للمصطلح User Datagram Protocol على الجهة الأخرى هو بروتوكول عديم الإتصال connectionless الذي نادراً ما يتعامل مع عمليات نقل البيانات المهمة لأنه يفتقر إلى التحكم في جريان البيانات أو أية طريقة اخرى للتأكد من توصيل البيانات عملياً, لكن بروتوكول UDP يستخدم إستخداماً شائعاً في التطبيقات, كتدفق streaming الصوت و الصورة و مستخدماً بكثرة في messenger و Skype و Whatsapp و غيرها..., لتحسين جودة الصوت و المكالمة حيث أنه اسرع بكثير من TCP لأنه لا يحتوي على آلية لتصحيح الأخطاء و التحكم في الجريان و في الأماكن التي لا يهم فيها فقدان الرزم الشبكية كثيراً. دوال مكتبة socket 1- دالة socket هي دالة تقوم بإنشاء سوكيت لكي تقوم بتأسيس الإتصال عن طريقه. كود: >>>import socket >>>s=socket.socket(socket.AF_INET, socket.SOCK_STREAM) 2-دالة bind تستخدم هذه الدالة لربط السوكت مع عنوان و بورت. كود: >>> import socket >>> s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) >>> host = '127.0.0.1' >>> port = 4444 >>> s.bind((host,port)) 3-دالة listen تسمح لنا بالبدء بالتنصت على عنوان و بورت معين لكي نستقبل الإتصالات الواردة عليه فيما بعد. كود: >>> import socket >>> s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) >>> host = '127.0.0.1' >>> port = 4444 >>> s.bind((host,port)) >>> s.listen(5) 4-دالة accept هي دالة نستخدمها لإستقبال الإتصالات الواردة لدينا بعدما نكون قد اجهزنا عملية التنصت على البورت. كود: >>> import socket >>> s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) >>> host = '127.0.0.1' >>> port = 4444 >>> s.bind((host,port)) >>> s.listen(5) >>> con,adr = s.accept() 5-دالة connect هي دالة نستخدمها للإتصال المباشر بعنوان آيبي معين. 6-دالة gethostname هي دالة ترجع لنا بستركتر (هيكل) يحوي معلومات شبيهة بالدالة السابقة لكن هذه سوف نستخدمها عندما نحاول الإتصال بهوست و ليس آيبي مثل google.com. كود: >>>import socket >>>socket.gethostname() 'DESKTOP-GTB7OI4' 7- دالة recv هي دالة نستخدمها لإستقبال الحزم البيانية Packets. كود: >>>import socket >>>sock.send(1024) 8-دالة send هي دالة نستخدمها لإرسال الحزم البيانية Packets. كود: >>>import socket >>>sock.send(b'welcome') 9-دالة closesocket هي دالة نستخدمها لإغلاق السوكت عند الإنتهاء منه. كود: >>>import socket >>>sock.closesocket() 10-دالة gethostbyname هي دالة تستخدم للحصول على آيبي النطاق. كود: >>>import socket >>>Domain = "google.com" >>>ip_web = socket.gethostbyname(Domain) >>>print(ip_web) 11- دالة gethostname هي دالة تستخدم لمعرفة آيبي الجهاز على الشبكة. كود: >>>import socket >>>socket.gethostname(); 12- دالة settimeout هي دالة الإنتظار حسب الثواني المطلوبة. كود: >>>import socket >>>s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) >>>s.settimeout(30)