ما هي السوكيتات في Python وكيف تعمل
السوكيت (Socket) هو واجهة برمجية تتيح الاتصال ثنائي الاتجاه بين العقد في شبكة الحاسوب. إنه منفذ افتراضي يمكن للتطبيقات من خلاله إرسال واستقبال البيانات عبر الشبكة.
تستخدم تطبيقات الشبكات الحديثة سوكيتات Python بشكل واسع لبناء أنظمة متنوعة. من تطبيقات المراسلة إلى الألعاب عبر الإنترنت وخدمات تبادل البيانات — كلها تعتمد على التفاعل الشبكي عبر السوكيتات.
المفاهيم الأساسية لبرمجة الشبكات
للعمل مع السوكيتات في Python، يجب فهم المفاهيم الرئيسية التالية:
- عنوان IP — عنوان فريد للجهاز في الشبكة
- المنفذ (Port) — معرف رقمي للخدمة على الجهاز
- TCP (بروتوكول التحكم في الإرسال) — بروتوكول موثوق لنقل البيانات
- UDP (بروتوكول بيانات المستخدم) — بروتوكول سريع بدون تأكيد تسليم
يضمن TCP تسليم البيانات مع التحكم في الأخطاء. بينما يعمل UDP بشكل أسرع لكنه لا يضمن تسليم الرسائل.
إعداد واستيراد مكتبة socket
وحدة socket مضمنة في المكتبة القياسية لـ Python. لبدء العمل مع السوكيتات، يكفي استيرادها ببساطة:
import socket
لا حاجة لأي تثبيتات إضافية. مكتبة socket متاحة في جميع إصدارات Python بشكل افتراضي.
إنشاء خادم TCP في Python
التنفيذ الأساسي للخادم
يقبل خادم TCP الاتصالات من العملاء ويعالج طلباتهم. لنلق نظرة على تنفيذ بسيط:
import socket
# إنشاء سوكيت TCP
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# ربط السوكيت بالعنوان والمنفذ
server_socket.bind(('localhost', 12345))
# بدء الاستماع (بحد أقصى 5 اتصالات في قائمة الانتظار)
server_socket.listen(5)
print("تم تشغيل الخادم. في انتظار الاتصالات...")
while True:
# قبول الاتصال
client_socket, address = server_socket.accept()
print(f"اتصال من {address}")
# استقبال الرسالة
message = client_socket.recv(1024).decode('utf-8')
print(f"تم استلام الرسالة: {message}")
# إرسال الرد
client_socket.send("مرحباً من الخادم!".encode('utf-8'))
# إغلاق الاتصال مع العميل
client_socket.close()
فهم عملية عمل الخادم
في الكود أعلاه، تحدث العمليات التالية:
- يتم إنشاء سوكيت باستخدام بروتوكول TCP
- يرتبط الخادم بالعنوان localhost والمنفذ 12345
- يبدأ الخادم في انتظار اتصالات العملاء
- عند اتصال العميل، يتم استقبال رسالته
- يرسل الخادم رداً ويغلق الاتصال
يشير socket.AF_INET إلى استخدام IPv4، بينما يشير socket.SOCK_STREAM إلى بروتوكول TCP.
تطوير عميل TCP
يتصل عميل TCP بالخادم ويتبادل البيانات معه. مثال على تنفيذ العميل:
import socket
# إنشاء سوكيت العميل
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# الاتصال بالخادم
client_socket.connect(('localhost', 12345))
# إرسال الرسالة
client_socket.send("مرحباً أيها الخادم!".encode('utf-8'))
# استقبال الرد
response = client_socket.recv(1024).decode('utf-8')
print(f"الرد من الخادم: {response}")
# إغلاق الاتصال
client_socket.close()
ينفذ العميل سلسلة من الإجراءات: الاتصال، إرسال البيانات، استقبال الرد، وإغلاق الاتصال.
العمل مع بروتوكول UDP
يوفر UDP طريقة أسرع لنقل البيانات بدون ضمانات التسليم. وهذا يجعله مناسباً للتطبيقات في الوقت الفعلي.
خادم UDP
المدونات
نشر تطبيق C# على VPS: المستوى المتقدم
ما هو الرون في Go؟ مقارنة بين المناهج وأمثلة واقعية
Swift: استبدال الأحرف في السلسلة النصية — شرح كامل للمبتدئين
توصيات الكتب
اقرأ أيضًا
أفضل بيئات التطوير المتكاملة (IDEs) والأدوات لتطوير C++: من الألف إلى الياء
هل المصفوفة فارغة في PHP؟ نستعرض جميع طرق التحقق
كيفية حذف عنصر من شريحة في Golang: دليل كامل مع أمثلة
إعادة هيكلة الكود القديم بلغة C++: من الألف إلى الياء - دليل شامل
خط أنابيب CI/CD لجافا سكريبت: الإعداد من الصفر في 10 خطوات