مشروع: تطبيق محادثة بسيطة باستخدام Python (Socket Programming مبسط)

 


حديثنا اليوم راح يكون عن كيف تسوي محادثة بسيطة باستخدام Python (Socket Programming مبسط) وراح نشرح لماذا أخترنا Python



المقدمة

أصبحت تطبيقات المحادثة جزءًا أساسيًا من حياتنا اليومية، فنحن نستخدمها في كل وقت تقريبًا سواء للدردشة مع الأصدقاء أو لمتابعة العمل أو حتى للدراسة. تطبيقات مثل واتساب، تليجرام، ماسنجر، زووم وغيرها تعمل على تقنيات معقدة جدًا في الخلفية.

لكن وراء هذه التطبيقات الضخمة توجد مفاهيم بسيطة يمكن لأي مبرمج مبتدئ أن يتعلمها. واحدة من أهم هذه المفاهيم هي Socket Programming، أي برمجة المقابس التي تسمح لأجهزة الكمبيوتر بالتحدث مع بعضها عبر الشبكة.

في هذا المقال سنتعلم خطوة بخطوة كيف نبني تطبيق محادثة بسيط باستخدام Python. سيكون التطبيق نصيًا عبر سطر الأوامر (Command Line)، لكنه يضع الأساس لفهم كيف تعمل تطبيقات الدردشة الحديثة. والأهم من ذلك أن هذا المشروع مناسب جدًا للمبتدئين، حيث يجمع بين مفاهيم الشبكات والبرمجة بشكل ممتع وسهل.


ما هو Socket Programming؟

الفكرة المبسطة

  • Socket (المقبس): نقطة تواصل بين جهازين.

  • Server (الخادم): الجهاز الذي يستقبل الاتصالات وينظمها.

  • Client (العميل): الجهاز الذي يتصل بالخادم ليرسل ويستقبل البيانات.

  • Port (المنفذ): الباب الذي يعبر منه الاتصال.

مثال حياتي مبسط

تخيل أنك تدير مقهى صغير:

  • المقهى هو الخادم.

  • الزبائن هم العملاء.

  • الطاولات مرقمة (مثل المنافذ) وكل زبون يجلس على طاولة محددة.

  • عند طلب القهوة، الزبون يتواصل معك عبر الطاولة، وأنت كصاحب المقهى تنقل الطلب للمطبخ ثم تعيد النتيجة.

بنفس الطريقة، يعمل Socket Programming كوسيط بين عدة أجهزة.


لماذا اخترنا Python؟

  • سهولة الفهم: لغة بايثون مشهورة ببساطتها، مما يجعلها مثالية للمبتدئين.

  • المكتبات المدمجة: مكتبة socket تأتي مع بايثون بشكل افتراضي.

  • الدعم المجتمعي: ملايين المقالات والشروحات موجودة لمساعدة المبرمجين.

  • المرونة: يمكن تطوير المشروع من تطبيق نصي صغير إلى تطبيق رسومي متكامل.


المتطلبات

  • Python 3.x مثبت على جهازك.

  • محرر نصوص مثل VS Code.

  • جهاز واحد يكفي للتجربة (يمكن فتح عدة نوافذ Terminal لمحاكاة أكثر من عميل).


🟡 الجزء الأول: كود الخادم (Server)

الخادم هو قلب النظام، يستقبل اتصالات العملاء ويمرر الرسائل بينهم.

مثال على كود Python لإنشاء خادم يستقبل اتصالات العملاء عبر Socket Programming







مثال على كود Python لإنشاء خادم يستقبل اتصالات العملاء عبر Socket Programming

















الكود جاهز للنسخ : 
import socket
import threading

# إعداد الخادم
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(("localhost", 12345))
server_socket.listen()

print("الخادم يعمل وينتظر الاتصالات...")

clients = []

def handle_client(client_socket):
    while True:
        try:
            message = client_socket.recv(1024).decode("utf-8")
            if not message:
                break
            print("رسالة جديدة:", message)

            for c in clients:
                if c != client_socket:
                    c.send(message.encode("utf-8"))
        except:
            clients.remove(client_socket)
            client_socket.close()
            break

while True:
    client_socket, client_address = server_socket.accept()
    print(f"تم الاتصال من {client_address}")
    clients.append(client_socket)
    thread = threading.Thread(target=handle_client, args=(client_socket,))
    thread.start()

🟡 الجزء الثاني: كود العميل (Client)

العميل هو من يكتب الرسائل ويرسلها للخادم، ويستقبل بدوره رسائل الآخرين.

مثال على كود Python لإنشاء عميل يتصل بخادم المحادثة عبر Socket Programming














الكود جاهز للنسخ : 

import socket

import threading


def receive_messages(sock):

    while True:

        try:

            message = sock.recv(1024).decode("utf-8")

            print("\nرسالة جديدة: " + message)

        except:

            print("تم قطع الاتصال بالخادم")

            sock.close()

            break


client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

client_socket.connect(("localhost", 12345))


thread = threading.Thread(target=receive_messages, args=(client_socket,))

thread.start()


while True:

    message = input("اكتب رسالتك: ")

    client_socket.send(message.encode("utf-8"))


🟡 تجربة التطبيق

لتجربة المشروع:

  1. افتح نافذة Terminal الأولى وشغل الخادم:

صورة توضح تبادل الرسائل بين العملاء عبر تطبيق محادثة مبسط



الكود جاهز للنسخ : 
python server.py

2. افتح نافذتين أخريين لتشغيل العملاء:
صورة توضح تبادل الرسائل بين العملاء عبر تطبيق محادثة مبسط



الكود جاهز للنسخ : 
python client.py

3. اكتب رسالة من العميل الأول → ستظهر عند العميل الآخر.

🟡 تحليل الكود

  • bind() لربط العنوان والمنفذ.

  • listen() لجعل الخادم ينتظر الاتصالات.

  • accept() لقبول اتصال عميل جديد.

  • send() و recv() لنقل البيانات.

  • threading يسمح بالتعامل مع عدة عملاء في وقت واحد.


🟡 مميزات المشروع

  • بسيط وسهل الفهم.

  • يوضح كيف تعمل المحادثات.

  • قابل للتطوير إلى مشروع أكبر.


🟡 أفكار للتطوير

  1. إضافة أسماء للمستخدمين بدلاً من الـ IP.

  2. تطوير واجهة رسومية باستخدام Tkinter.

  3. تخزين المحادثات في قاعدة بيانات.

  4. إضافة ميزة التشفير لحماية الخصوصية.

  5. تشغيل الخادم على الإنترنت ليتمكن أشخاص من دول أخرى من المشاركة.


🟡 TCP أم UDP؟

  • TCP: يضمن وصول الرسائل بالترتيب. مناسب لتطبيقات المحادثة.

  • UDP: أسرع لكنه لا يضمن وصول كل رسالة. مناسب للألعاب والبث المباشر.
    لذلك اخترنا TCP في مشروعنا.


الخاتمة

مشروعنا اليوم أعطاك لمحة عملية عن كيفية بناء تطبيق محادثة باستخدام Python و Socket Programming.
صحيح أن التطبيق نصي وبسيط، لكنه الأساس لفهم العالم الكبير وراء تطبيقات الدردشة.

ابدأ بهذا المشروع، ثم طوّره خطوة بخطوة، وستجد نفسك قادرًا على بناء تطبيقات معقدة ومفيدة. 🚀


تعليقات