في اطار سلسلة برمجة الشبكات
اضع بين ايديكم سكريبت سرفر بالغة بايثون
مع الشرح
ملاحظات :
-قمت باستخدام البرمجة الموجهة (كلاس ، ميتود = طريقة) لكن يمكن استخدام برمجة الاجرائية في برمجته
المهم هو فهم المبدأ .
-استعملت في السكريبت ip : 127.0.0.1هو للجهاز المحلي يعني لجهازك الخاص و هو اي بي المرافق للعنوان التالي localhost
صورة اثناء تشغيل سكريبت

لتحميل سكريبت بصيغة py
http://www.mediafire.com/?dbld17djgsgbdlo
نبدأ مع الشرح بسم الله
Python
import socket //هنا نقوم باستدعاء المكتبة
class sof1ane_serveur(object): //نقوم بتعريف كلاس جديد
def __init__(self, host='', port=8080): //هنا المشيد والبرامترات الخاصة
self._host, self._port=host, port //ارجاع قيم الهوست و بورت
self.address=(host, port)
// متغير من نوع قائمة وارجاع قيم الهوست وبورت فيه
self.sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
//ها نقوم بتحديد كل من
socket types et address (and protocol) families
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
//ليتم غلق البورت بعد غلق السيرفر SO_REUSEADDR هنا يجب تفعيل
عدم استخدام هذا المر يؤدي الى حدوث خطأ في تشغيل السكريبت مرة اخرى تحت عنوان البورت مشغول
def demarrer(self): // تعريف ميتود جديد
self.sock.bind(self.address)
// ربط العنوان الخاص بالخادم الذي يتم تنفيذ البرنامج عليه
self.sock.listen(1)
//تجهيز الخادم لاستقبال الاتصالات منالشبكة مع تحديد عدد معين للاتصالات لاستقبالها
print "Server s'executant sur: ", self._port
self.gerer_con()
// نستدعي الطريقة تسيير الاتصال الذي سنتطرق اليها
def handle_request(self):
// تعريف الطريقة تسيير الاتصال
while True:
//حلقة غير منتهية لانتظار الاتصال
clientsock, addr=self.sock.accept()
//لحضة قبول الأتصال نستقبل عنوان الأي بي الخاص بالعميل و مع توفير منفذ محلي
اهمية كبيرة نضرا لانها ترجع لنا كائن العميل مع عنوانه accept() ملاحظة للطريقة
print "Connexion à partir de: ", addr
clientsock.sendall(str(addr)+" vous etes connecte au serveur...")
// ارسال رسالة نجاح الاتصال
while True:
msg=clientsock.recv(100)
//مع الكائن الذي انشأته الطريقة send et recv تستخدم
و 100 تمثل عدد الاحرف القصوى في كل رسالة accept()
if msg:
print ">> ", msg
clientsock.sendall(msg)
// >> ارسال رمز
الذي يبين جاهزية استقبال الرسائل للعميل
clientsock.close()
if __name__=="__main__":
try:
serveur=sof1ane_serveur()
serveur.start()
except KeyboardInterrupt:
exit()
// تنفيذ البرنامج الرئيسي مع التعامل مع الاخطاء في حال حدوثها
اي استفسار انا موجود
ان أخطــــــــــــــأت فمن نفــــــــــــسي وأن أصــــــــــبت فمـــــــن الله
