نصائح

اكتب تطبيقات الشبكة المدركة مع دلفي

اكتب تطبيقات الشبكة المدركة مع دلفي

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

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

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

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

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

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

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

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

للبدء ، افتح 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) ؛
beginif ClientSocket1.Active ثم
ClientSocket1.Socket.SendText (Edit1.Text)؛
النهاية;

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

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

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

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

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

إجراء TForm1.ServerSocket1ClientRead (المرسل: TObject؛
المقبس: TCustomWinSocket) ؛
فار
الأول: صحيح.
sRec: خيط;
beginfor أنا: = 0 إلى ServerSocket1.Socket.ActiveConnections-1 dobeginwith ServerSocket1.Socket.Connectionsi dobegin
sRec: = ReceiveText؛
إذا sRecr "thenbegin
Memo1.Lines.Add (RemoteAddress + 'sends:')؛
Memo1.Lines.Add (sRecr)؛
النهاية;
النهاية;
النهاية;
النهاية;

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

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