كيفية تبادل البيانات عبر شبكة باستخدام دلفي

من كل المكونات التي دلفي يوفر لدعم التطبيقات التي تتبادل البيانات عبر شبكة (الإنترنت ، والإنترانت ، والمحلية) ، وهما من أكثرها شيوعًا TServerSocket و TClientSocket، وكلاهما مصمم لدعم وظائف القراءة والكتابة عبر اتصال TCP / IP.

مكونات Winsock ودلفي المقبس

يوفر Windows Sockets (Winsock) واجهة مفتوحة لبرمجة الشبكة ضمن نظام التشغيل Windows. يوفر مجموعة من الوظائف ، وبنية البيانات ، والمعلمات ذات الصلة المطلوبة للوصول إلى خدمات الشبكة لأي مكدسات بروتوكول. يعمل Winsock كحلقة وصل بين تطبيقات الشبكة ومكدسات البروتوكول الأساسية.

تعمل مكونات مأخذ Delphi (غلافات Winsock) على تبسيط عملية إنشاء التطبيقات التي تتصل بأنظمة أخرى تستخدم TCP / IP والبروتوكولات ذات الصلة. باستخدام المقابس ، يمكنك قراءة وكتابة الاتصالات بأجهزة أخرى دون الحاجة إلى القلق بشأن تفاصيل برنامج الشبكات الأساسي.

لوحة الإنترنت على شريط أدوات مكونات دلفي تستضيف TServerSocket و TClientSocket مكونات وكذلك TcpClient, TcpServer ، و TUdpSocket.

لبدء اتصال مأخذ توصيل باستخدام مكون مأخذ توصيل ، يجب عليك تحديد مضيف ومنفذ. بشكل عام، مضيف يحدد اسمًا مستعارًا لعنوان IP الخاص بنظام الخادم ؛ ميناء يحدد رقم المعرف الذي يحدد اتصال مقبس الخادم.

instagram viewer

برنامج بسيط أحادي الاتجاه لإرسال النص

لإنشاء مثال بسيط باستخدام مكونات المقبس المقدمة من دلفي ، قم بإنشاء نموذجين - أحدهما للخادم والآخر للكمبيوتر العميل. الفكرة هي تمكين العملاء من إرسال بعض البيانات النصية إلى الخادم.

للبدء ، افتح Delphi مرتين ، وإنشاء مشروع واحد لتطبيق الخادم وآخر للعميل.

جانب الخادم:

في نموذج ، قم بإدراج مكون TServerSocket واحد ومكون TMemo واحد. في ال حدث OnCreate للنموذج ، أضف الكود التالي:

إجراء TForm1.FormCreate (المرسل: TObject) ؛
ابدأ
ServerSocket1.Port: = 23؛
ServerSocket1.Active: = صواب ؛
النهاية;

ال OnClose يجب أن يحتوي الحدث على:

إجراء TForm1.FormClose
(المرسل: TObject ؛ فار العمل: TCloseAction) ؛
ابدأ
ServerSocket1.Active: = false؛
النهاية;

جانب العميل:

لتطبيق العميل ، أضف مكون TClientSocket و TEdit و TButton إلى نموذج. أدخل الكود التالي للعميل:

إجراء TForm1.FormCreate (المرسل: TObject) ؛
ابدأ
ClientSocket1.Port: = 23؛
// عنوان TCP / IP المحلي للخادم
ClientSocket1.Host: = '192.168.167.12'؛
ClientSocket1.Active: = صواب ؛
النهاية;
إجراء TForm1.FormClose (المرسل: TObject؛ فار العمل: TCloseAction) ؛
ابدأ
ClientSocket1.Active: = false؛
النهاية;
إجراء TForm1.Button1Click (المرسل: TObject) ؛
startif ClientSocket1.Active ثم
ClientSocket1.Socket. SendText (Edit1.Text) ؛
النهاية;

يصف الرمز نفسه إلى حد كبير: عندما ينقر العميل على زر ، سيتم إرسال النص المحدد داخل مكون Edit1 إلى الخادم مع المنفذ المحدد وعنوان المضيف.

العودة إلى الخادم:

اللمسة الأخيرة في هذه العينة هي توفير وظيفة للخادم "لرؤية" البيانات التي يرسلها العميل. الحدث الذي يهمنا هو OnClientRead - يحدث عندما يجب على مقبس الخادم قراءة المعلومات من مأخذ توصيل العميل.

إجراء TForm1.ServerSocket1ClientRead (المرسل: TObject؛
المقبس: TCustomWinSocket) ؛
ابدأ
خطوط Memo1.Lines. إضافة (المقبس. ReceiveText) ؛
النهاية;

عندما يرسل أكثر من عميل بيانات إلى الخادم ، فستحتاج إلى مزيد من الشفرة:

إجراء TForm1.ServerSocket1ClientRead (المرسل: TObject؛
المقبس: TCustomWinSocket) ؛
فار
i: عدد صحيح
sRec: خيط;
startfor أنا: = 0 إلى ServerSocket1.Socket. ActiveConnections-1 dobeginwith ServerSocket1.Socket. اتصالات [i] dobegin
sRec: = ReceiveText؛
إذا sRecr '' ثم تبدأ
خطوط Memo1.Lines. إضافة (RemoteAddress + 'sends:')؛
خطوط Memo1.Lines. إضافة (sRecr) ؛
النهاية;
النهاية;
النهاية;
النهاية;

عندما يقرأ الخادم المعلومات من مقبس العميل ، فإنه يضيف هذا النص إلى مكون Memo ؛ تتم إضافة كل من النص والعميل RemoteAddress ، لذلك عليك معرفة العميل الذي أرسل المعلومات. في التطبيقات الأكثر تطوراً ، يمكن أن تعمل الأسماء المستعارة لعناوين IP المعروفة كبديل.

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