سيكون هذا الموضوع مدخلنا الى برمجة المقبس (socket) باستخدام لغة بايثون , ويعتبر المقبس من الأساسيات وراء كل عملية اتصال بالشبكة يقوم بها الكمبيوتر وعلى سبيل المثال عندما نقوم بالاتصال بمحرك البحث ونكتب www.google.dz على المتصفح يقوم الجهاز بفتح مقبس ويتصل بالموقع لجلب الصفحة و إظهارها لنا، نفس العملية تنطبق على برامج الدردشة مثل gtalk او skype اي ان عملية اتصال بالشبكة تمر عبر المقبس.
الدالة socket.socket تقوم بانشاء المقبس و اعادة إرجاع وصف المقبس حتى يمكننا استخدامها في دوال أخرى متعلقة بالمقبس.
والكود السابق يقوم بإنشاء مقبس بالإعدادات التالية :
AF_INIT خاص بالعنوان النسخة رقم 4 IPV4
SOCK_STREAM تهيئة المقبس بالاتصال باستخدام TCP
معالجة الأخطاء
إذا فشلت أي دالة من دوال المقبس سيقوم بايثون باستثناء يسمى socket.error
إذا قمنا بإنشاء المقبس بنجاح ولكن ماذا بعد؟ الآن سنقوم بتجربة الاتصال بإحدى السيرفرات باستخدام هذا المقبس وليكن www.google.com
ملاحظة
ماعدا sock_stream هناك دالة أخرى وهي SOCK_DGRAM وهي خاصة ببروتوكول UDP وهذا النوع من المقابس غير قابل للاتصال وفي درسنا هذا سنتعامل مع SOCK_STREAM الخاص ببروتوكول TCP
سنقوم بالاتصال بسيرفر بعيد على رقم منفذ معين، إذا نحن بحاجة الى شيئن عنوان IP ورقم المنفذ للاتصال به ، إذا عليك بمعرفة عنوان السيرفر الذي تريد الاتصال به وفي هذا المثال سنقوم باستخدام عنوان www.google.com كعينة .
الحصول على عنوان السيرفر
قبل الاتصال بالسيرفر نحن بحاجة الى عنوان ip الخاص به وللحصول عليه باستخدام بايثون نقوم بالتالي :
الآن وبعد حصولنا على العنوان الخاص بالسيرفر نستطيع الاتصال به عبر منفذ معين باستخدام الدالة connect
قم بتشعيل البرنامج
تم إنشاء المقبس والاتصال ، قم بتجريب الاتصال بمنفذ أخر غير المنفذ 80 حيث لا يمكنك الاتصال وهذت يعني ان هذا المنفذ غير مفتوح للاتصال وهذا منطقي (يفترض انك ملم بالشبكات طبعا) وهذا يحتم علينا استخدام برنامج ماسح المنافذ.
إلي هنا ينتهي الدرس الأول حيث قمت بتقسيم الموضوع إلى عدة دروس حتى يتسنى لك عزيزي القارئ الاستيعاب والفهم وطبعا حاول أن تقوم بالاتصال على سيرفرات أخرى وقم بالبحث على الأنترنيت لمزيد من المعلومات ولا تكتفي بهذا الدرس .
في الدرس المقبل سنقوم بتعلم كيفية إرسال واستقبال البيانات إلى السيرفر و إلى ذلك الوقت في أمان الله .
في هذا الدرس سنقوم ببرمجة مقبس tcp باستخدام لغة البرمجة بايثون .
وقبل أن تبدأ يجب أن تكون على معرفة بأساسيات استخدام بايثون .
انشاء Socket
اولا علينا ان نقوم بانشاء المقبس والدالة socket.socket تقوم بهذا العمل
#مثال عن زبون المقبس في بايثون import socket #استدعاء مكتبة المقبس s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) print 'Socket Created'
الدالة socket.socket تقوم بانشاء المقبس و اعادة إرجاع وصف المقبس حتى يمكننا استخدامها في دوال أخرى متعلقة بالمقبس.
والكود السابق يقوم بإنشاء مقبس بالإعدادات التالية :
AF_INIT خاص بالعنوان النسخة رقم 4 IPV4
SOCK_STREAM تهيئة المقبس بالاتصال باستخدام TCP
معالجة الأخطاء
إذا فشلت أي دالة من دوال المقبس سيقوم بايثون باستثناء يسمى socket.error
#معالجة الأخطاء في برمجة المقابس في بايثون import socket import sys #للخروج try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) except socket.error, msg: print 'Failed to create socket. Error code: ' + str(msg[0]) + ' , Error message : ' + msg[1] sys.exit(); print 'Socket Created'
ملاحظة
ماعدا sock_stream هناك دالة أخرى وهي SOCK_DGRAM وهي خاصة ببروتوكول UDP وهذا النوع من المقابس غير قابل للاتصال وفي درسنا هذا سنتعامل مع SOCK_STREAM الخاص ببروتوكول TCP
برمجة مقبس udp في بايثونالاتصال بالسيرفر
سنقوم بالاتصال بسيرفر بعيد على رقم منفذ معين، إذا نحن بحاجة الى شيئن عنوان IP ورقم المنفذ للاتصال به ، إذا عليك بمعرفة عنوان السيرفر الذي تريد الاتصال به وفي هذا المثال سنقوم باستخدام عنوان www.google.com كعينة .
الحصول على عنوان السيرفر
قبل الاتصال بالسيرفر نحن بحاجة الى عنوان ip الخاص به وللحصول عليه باستخدام بايثون نقوم بالتالي :
import socket #for sockets import sys #for exit try: #create an AF_INET, STREAM socket (TCP) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) except socket.error, msg: print 'Failed to create socket. Error code: ' + str(msg[0]) + ' , Error message : ' + msg[1] sys.exit(); print 'Socket Created' host = 'www.google.com' try: remote_ip = socket.gethostbyname( host ) except socket.gaierror: #could not resolve print 'Hostname could not be resolved. Exiting' sys.exit() print 'Ip address of ' + host + ' is ' + remote_ip
import socket #for sockets import sys #for exit try: #create an AF_INET, STREAM socket (TCP) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) except socket.error, msg: print 'Failed to create socket. Error code: ' + str(msg[0]) + ' , Error message : ' + msg[1] sys.exit(); print 'Socket Created' host = 'www.google.com' port = 80 try: remote_ip = socket.gethostbyname( host ) except socket.gaierror: #could not resolve print 'Hostname could not be resolved. Exiting' sys.exit() print 'Ip address of ' + host + ' is ' + remote_ip #Connect to remote server s.connect((remote_ip , port)) print 'Socket Connected to ' + host + ' on ip ' + remote_ip
python client.py $
Socket Created
Ip address of www.google.com is 74.125.236.83
Socket Connected to www.google.com on ip 74.125.236.83
تم إنشاء المقبس والاتصال ، قم بتجريب الاتصال بمنفذ أخر غير المنفذ 80 حيث لا يمكنك الاتصال وهذت يعني ان هذا المنفذ غير مفتوح للاتصال وهذا منطقي (يفترض انك ملم بالشبكات طبعا) وهذا يحتم علينا استخدام برنامج ماسح المنافذ.
إلي هنا ينتهي الدرس الأول حيث قمت بتقسيم الموضوع إلى عدة دروس حتى يتسنى لك عزيزي القارئ الاستيعاب والفهم وطبعا حاول أن تقوم بالاتصال على سيرفرات أخرى وقم بالبحث على الأنترنيت لمزيد من المعلومات ولا تكتفي بهذا الدرس .
في الدرس المقبل سنقوم بتعلم كيفية إرسال واستقبال البيانات إلى السيرفر و إلى ذلك الوقت في أمان الله .
ليست هناك تعليقات:
إرسال تعليق