الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

استفسار بشان برمجه الشبكات

بدأه super_rio في 26 مارس 2010 · 8 رد · 1,427 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

انا عندي برنامج مكون من كلينت و سيرفر واقوم بارسال الاوامر كالتالي

client>server>client

ولفعل ذلك استخدم لوب في السيرفر كالتالي

for i:=0 to Server.Socket.ActiveConnections-1 do

لكي اجد الكلينت المطلوب

وهذا الامر انا اري انه بطيء هل يوجد شيء يجعلني اصل للكلينت مباشره بدون هذه الدوره

وماذا تفعل برامج الشبكات الكبيره كالياهو مثلا هل يصنع دوره في رايكم ليجد مستخدم من ضمن الملاين الي علي السيرفر؟؟

#2

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

الحل الامثل :

اولا : تحتاج لانشاء عنصر Object لكل مستخدم يقوم بالاتصال بالسيرفر وهو عنصر يحمل Socket الخاصة بالمستخدم المنشأ بعض البيانات مثل اسم المستخدم كلمة المرور

وحالة المستخدم هل هو مستوفي شروط المتابعة ام لا Authenticated .... الخ .

داخل هذا العنصر تضع دالة الاستماع لرسائل النظام System Messages وبهذا سيكون من السهل الوصول لاي عضو او جميعهم في لمح البصر بمجرد ارسال رسالة نظام من خلال الدالة SendMessage تصل لكافة المتصلين في ان واحد والمستخدم المستهدف هو من يرد علي الرسالة ويتفعل معها حسب المطلوب .

مثال عن انشاء قناة اتصال .

unit Unit2;

interface
uses ComCtrls,ScktComp;

Type


TClientPool = Class (TObject)
Private
ClientSocketLink		: TCustomWinSocket ;
FClientName         : String ;
FAuthenticated      : Boolean ;

Public
constructor Create (ClientSocket : TCustomWinSocket);
destructor  Destroy ; override ;


published

Property ClientName : String Read FClientName	Write FClientName ;
property Authenticated : Boolean Read FAuthenticated	write FAuthenticated default False;
//...... etc( properties)
End;


implementation


constructor TClientPool.Create (ClientSocket : TCustomWinSocket);
begin
  inherited Create ;

   ClientSocketLink :=  ClientSocket ;

end;
destructor  TClientPool.Destroy ;
  begin

  ClientSocketLink := nil;

  inherited Destroy ;
  end;



end.

ويتم عمل خصائص لكل شيئ يخص المتصل للتعامل معها في اي مكان في النظام .

تحياتي

تم تعديل هذه المشاركة بواسطة prof_1982 في 3 أبريل 2010 في 12:28

2

الإنسان الذي يقول بأنه لا يمكن عمل شيء يجب ألا يعيق مطلقاً الإنسان الذي يقوم بعمل ذلك الشيء.

إن تخطئ فأنت إنسان ... أما أن تلوم جهازك الكمبيوتر على خطأك فهذا أكثر إنسانية.

#3

هل من الممكن ان توضح اكثر كيفيه استخدام هذه الطريقه هل من الممكن برنامج صغير يوضح معالجه الرسائل اذا تكرمت

تم تعديل هذه المشاركة بواسطة super_rio في 5 أبريل 2010 في 04:52

#4

حاضر من عيوني الليلة ان شاء الله اكتب مثال عملي علي ذلك .

الإنسان الذي يقول بأنه لا يمكن عمل شيء يجب ألا يعيق مطلقاً الإنسان الذي يقوم بعمل ذلك الشيء.

إن تخطئ فأنت إنسان ... أما أن تلوم جهازك الكمبيوتر على خطأك فهذا أكثر إنسانية.

#5

شكرا جدا يا باشا و منتظر المثال علي احر من الجمر

#6

السلام عليكم

عذرا للتأخير مرفق هذه المشاركة مثالين واحد للعميل واخر للخادم ، لبيان كيفية ارسال رسالة من السيرفر الي جميع المتصلين دون الحاجة الي جملة الدوران for توضيحا للمشاركة السابقة

تحياتي لك

CLientServer_AT.rar

الإنسان الذي يقول بأنه لا يمكن عمل شيء يجب ألا يعيق مطلقاً الإنسان الذي يقوم بعمل ذلك الشيء.

إن تخطئ فأنت إنسان ... أما أن تلوم جهازك الكمبيوتر على خطأك فهذا أكثر إنسانية.

#7

شكرا يا باشا علي المثال انا من امبارح عمال اقري في البرمجه الغرضيه ورسائل النظام و الوراثه علشان احاول اوصل للموضوع

شكرا علي المثال

#8

شكرا المثال جميل جدا

وانا كنت قربت اجيبه بفضل فكرتك طبعا بس مكنتش عارف استقبل رسايل النظام

شكرا علي المثال جدا

تم تعديل هذه المشاركة بواسطة super_rio في 6 أبريل 2010 في 17:24

#9

العفوا اخي با رك الله فيك .

الإنسان الذي يقول بأنه لا يمكن عمل شيء يجب ألا يعيق مطلقاً الإنسان الذي يقوم بعمل ذلك الشيء.

إن تخطئ فأنت إنسان ... أما أن تلوم جهازك الكمبيوتر على خطأك فهذا أكثر إنسانية.

مواضيع مشابهة