الشبكات والمقابس
الشبكات والمقابس
Section titled “الشبكات والمقابس”يوفر كنوز دعماً للبرمجة الشبكية من خلال واجهة مقابس سهلة الاستخدام.
إنشاء مقبس TCP
Section titled “إنشاء مقبس TCP”الخادم
Section titled “الخادم”// إنشاء مقبس الخادمدع متغير مقبس_خادم = أنشئ_مقبس();
// ربط المقبس بعنوان ومنفذاربط_مقبس(مقبس_خادم, "127.0.0.1", 8080);
// بدء الاستماعاستمع_مقبس(مقبس_خادم);
اطبع("الخادم يستمع على المنفذ 8080...");
// قبول الاتصالاتدع متغير مقبس_عميل = اقبل_اتصال(مقبس_خادم);
// استقبال البياناتدع بيانات = استقبل_مقبس(مقبس_عميل);اطبع("البيانات المستلمة:");اطبع(بيانات);
// إرسال ردأرسل_مقبس(مقبس_عميل, "مرحباً من الخادم!");
// إغلاق المقابسأغلق_مقبس(مقبس_عميل);أغلق_مقبس(مقبس_خادم);العميل
Section titled “العميل”// إنشاء مقبس العميلدع متغير مقبس = أنشئ_مقبس();
// الاتصال بالخادماتصل_مقبس(مقبس, "127.0.0.1", 8080);
// إرسال رسالةأرسل_مقبس(مقبس, "مرحباً من العميل!");
// استقبال الرددع رد = استقبل_مقبس(مقبس);اطبع("الرد:");اطبع(رد);
// إغلاق المقبسأغلق_مقبس(مقبس);دوال المقابس
Section titled “دوال المقابس”| الدالة | الوصف |
|---|---|
أنشئ_مقبس() | إنشاء مقبس جديد |
اربط_مقبس(م, عنوان, منفذ) | ربط المقبس بعنوان ومنفذ |
استمع_مقبس(م) | بدء الاستماع للاتصالات |
اقبل_اتصال(م) | قبول اتصال وارد |
اتصل_مقبس(م, عنوان, منفذ) | الاتصال بخادم |
أرسل_مقبس(م, بيانات) | إرسال بيانات |
استقبل_مقبس(م) | استقبال بيانات |
أغلق_مقبس(م) | إغلاق المقبس |
مثال: خادم Echo
Section titled “مثال: خادم Echo”خادم يعيد إرسال ما يستقبله:
دالة خادم_صدى(منفذ: صحيح) { دع متغير مقبس_خادم = أنشئ_مقبس(); اربط_مقبس(مقبس_خادم, "0.0.0.0", منفذ); استمع_مقبس(مقبس_خادم);
اطبع("خادم الصدى يعمل...");
كرر { // قبول اتصال جديد دع متغير عميل = اقبل_اتصال(مقبس_خادم);
// استقبال الرسالة دع رسالة = استقبل_مقبس(عميل);
إذا طول(رسالة) > 0 { اطبع("رسالة مستلمة:"); اطبع(رسالة);
// إعادة إرسال الرسالة أرسل_مقبس(عميل, رسالة); }
أغلق_مقبس(عميل); }}مثال: عميل HTTP بسيط
Section titled “مثال: عميل HTTP بسيط”دالة طلب_http(مضيف: نص, منفذ: صحيح, مسار: نص) -> نص { دع متغير مقبس = أنشئ_مقبس(); اتصل_مقبس(مقبس, مضيف, منفذ);
// إنشاء طلب HTTP دع طلب = "GET "; // يمكن إضافة المسار والترويسات
أرسل_مقبس(مقبس, طلب);
دع رد = استقبل_مقبس(مقبس); أغلق_مقبس(مقبس);
أرجع رد;}الخادم متعدد الخيوط
Section titled “الخادم متعدد الخيوط”لخدمة عدة عملاء في نفس الوقت:
دالة خادم_متعدد(منفذ: صحيح) { دع متغير مقبس_خادم = أنشئ_مقبس(); اربط_مقبس(مقبس_خادم, "0.0.0.0", منفذ); استمع_مقبس(مقبس_خادم);
اطبع("الخادم متعدد الخيوط يعمل...");
كرر { دع متغير مقبس_عميل = اقبل_اتصال(مقبس_خادم);
// معالجة كل عميل في خيط منفصل أطلق || { خدمة_عميل(مقبس_عميل); }; }}
دالة خدمة_عميل(مقبس: صحيح) { دع بيانات = استقبل_مقبس(مقبس);
// معالجة البيانات اطبع("معالجة طلب العميل...");
// إرسال الرد أرسل_مقبس(مقبس, "تمت المعالجة بنجاح");
أغلق_مقبس(مقبس);}معالجة الأخطاء
Section titled “معالجة الأخطاء”دالة اتصال_آمن(عنوان: نص, منفذ: صحيح) -> نتيجة<صحيح, نص> { جرب { دع متغير مقبس = أنشئ_مقبس(); اتصل_مقبس(مقبس, عنوان, منفذ); أرجع موافق(مقبس); } التقط خطأ { أرجع فشل("فشل الاتصال"); }}
// الاستخدامطابق اتصال_آمن("127.0.0.1", 8080) { موافق(م) => { اطبع("تم الاتصال بنجاح"); // استخدام المقبس أغلق_مقبس(م); } فشل(خ) => { اطبع("خطأ:"); اطبع(خ); }}مثال كامل: دردشة بسيطة
Section titled “مثال كامل: دردشة بسيطة”الخادم
Section titled “الخادم”// خادم دردشة بسيطدالة خادم_دردشة() { دع متغير مقبس = أنشئ_مقبس(); اربط_مقبس(مقبس, "0.0.0.0", 9000); استمع_مقبس(مقبس);
اطبع("خادم الدردشة جاهز على المنفذ 9000");
// قائمة العملاء المتصلين دع متغير عملاء: متجه<صحيح> = متجه[];
كرر { دع متغير عميل = اقبل_اتصال(مقبس); عملاء.ادفع(عميل); اطبع("عميل جديد متصل");
// معالجة الرسائل في خيط منفصل أطلق || { معالجة_رسائل(عميل); }; }}
دالة معالجة_رسائل(مقبس_عميل: صحيح) { كرر { دع رسالة = استقبل_مقبس(مقبس_عميل);
إذا طول(رسالة) == 0 { أوقف; }
اطبع("رسالة:"); اطبع(رسالة);
// يمكن بث الرسالة لجميع العملاء }
اطبع("عميل قطع الاتصال"); أغلق_مقبس(مقبس_عميل);}العميل
Section titled “العميل”// عميل دردشة بسيطدالة عميل_دردشة() { دع متغير مقبس = أنشئ_مقبس(); اتصل_مقبس(مقبس, "127.0.0.1", 9000);
اطبع("متصل بخادم الدردشة");
// إرسال رسائل أرسل_مقبس(مقبس, "مرحباً بالجميع!"); أرسل_مقبس(مقبس, "كيف حالكم؟");
// استقبال الردود في خيط منفصل أطلق || { كرر { دع رد = استقبل_مقبس(مقبس); إذا طول(رد) > 0 { اطبع(رد); } } };
// الانتظار قليلاً نم(5000);
أغلق_مقبس(مقبس);}