delphi4arab منتديات دلفي للعرب

نسخة كاملة : استفسار حول serversocket
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم ورحمة الله

:o اعتذر لان مشاركتي الاولى عبارة استفسارRolleyes
المهم بعد بحث في هذا المنتدى وفي منتديات كثيرة لم اجد معلومات حول نقطة دائما ما نسنفزني وهي :
عند تصميم برنامج يعتمد على socket فان طريقة الاتصال المعروفة(على حسب فهمي) هي بين برنامج الخادم (clientsocket) وبرنامج العميل (serversocket) لكن عند تعدد برامج العميل، كيف نستطيع ربط عميلين (على الاقل)ببرنامج سرفر واحد بمعنى كيف يمكن للسرفر تحويل المعلومات من العميل 1 الى العميل 2
- برنامج السرفر دائم الاتصال بالنترنت ويحوي قاعدة بيانات صغيرة
-برنامج العميل يرسل معلومات الى السرفر (قاعدة البيانات) والى العميل الاخر.

واعتذر مرة اخرى وشكرا مسبقا.

لاداعئ للاعتذار المنتدى مكان لتبادل المعرفة بين الجميع

إقتباس :كيف يمكن للسرفر تحويل المعلومات من العميل 1 الى العميل 2

تقصد كيف يمكن لServer تحويل معلومة منClient1 الى Client2

كمثال في برنامج محادثة Mohammed يرسل جملة لAbdelAziz
Mohammed يرسل الى Server
Server يتلقى المعلومة
Server يفحص المعلومة ليقوم ما يترتب عليها، وهنا هنا ارسال المنعلومة الى Abdelaziz
Server يبحث بين المتصلين عن AbdelAziz
ان وجده يرسل له الجملة (المعلومة)
ان لم يجده يرسل رسالة الى Mohammed بان الرسالة لم تصل لان AbdelAziz غير موجود
هذه هي الفكرة باختثار
اما ان كنت تقصد شيئ اخر اوضح ذلك قدر ما تستطيع
والسلام عليكم
السلام عليكم ورحمة الله

شوف اخي: في برنامج المحادثة فان سرفر واحد يربط عميلين فقط (02clients) اظنها سهلةRolleyes.. لكن في حالة وجود اكثر من عميلين كيف يمكن للسرفر توجيه المعلومات مثلا لـ client2 دون client3.
في مثال برنامج المحادثة فان السرفر ( عندي) لا يفرق بين الـclients :confused:فيستقبل ويرسل في نفس الوقت من جميع clients... فيظهر كل ما كتب في memo مثلا (وكانها غرفة شات ) :oوهنا ما اردت هو كيف يمكن للسرفر التمييز بين client2 و client3 ....
في جهد متواضع لايجاد حل اردت استعمال قاعدة بيانات لكن في الحقيقة لم اجد من اين ابداRolleyes
**** ان اكون قد اوضحت .. والسلام عليكم

اعطيتك مثال لبرنامج محادثة كون برنامج المحادثة يستخدم من اكثر من شخصين في نفس الوقت
لو تمعنت في ردي السابق انني قلت "يبحث بين المتصلين عن AbdelAziz"
اي هناك عدد من المتصلين
وكل متصل له ID يميزه عن غيره

لكي تفهم اكثر لدينا المكون ServerSocket1
به جدول للمتصلين ServerSocket1.Socket.Connections
لارسال للمتصل الرابع مثلا ServerSocket1.Socket.Connections[3].SendBuf
وان كان نص SendText او SendStream ان كان شيئ اخر
لاحظ كتبت 3 لانه المتصل الرابع
لكن في الحقيقة قبل ذلك يجب التحقق من ان الرابع هو المعني وذلك يتم من خلال IP او من خلال المعومات المرسلة عند الاتصال اول مرة من Name و Password

هل وصلت الفكرة ؟

والسلام عليكم
السلام عليكم ورحمة الله

الحمد لله اظن وصلت الفكرة وباقي التطبيق فقط
-السرفر ينشئ قائمة بالمتصلين (listbox)وعلى حسب ترتيب اتصالهم ويرسلها لاي عميل يتصل
-العميل يختار عميل اخر "للمحادثة"
-السرفر من خلال ترتيب العميل في الاتصال' i ' يرسل البيانات Server.Socket.Connections[i].sendtext
وهكذا يتم الارسال الى المتصل الذي ترتيبه في الاتصال i في هذه الحالة i := listbox.itemIndex
لكن باقي الصيغة التي يرسلها العميلx لاختيار عميلy
والسلام عليكم

إقتباس :باقي الصيغة التي يرسلها العميلx لاختيار عميلy

هذا يسمى البروتوكول، وهو مجموعة الاوامر التي يفهمها الخادم والعميل ويتعامون بها
مثال
لارسال رسالة نصها "Visit delphi4arab.net"الى شخص اسمه AbdelAziz يكون النص
إقتباس :Send@AbdelAziz@Visit delphi4arab
عندما يستقبل Server النثص يقوم بتقسيمه حسب الحرف الخاص الفاصل وهو @
يحصل على ثلاث String
Send وهو امر الارسال
AbdelAziz الشخص المرسل اليه
Visit delphi4arab.net وهو محتوى الرسالة

مثال اخر
إقتباس :SND9AbdelAzizVisit delphi4arab
في هذا المثال يقوم Server باخذ 3 احرف الاولى التي تمثل الامر (كل الأوامر من 3 احرف فقط)
SND امر ارسال
في هذه الحالة يخذ الارقام التي تليه
9 تمثل عدد الاحرف التي ياخذها في مايلي والتي تمثل اسم المرسل اليه
اي AbdelAziz وما تبقى من النص يمثل الرسالة Visit delphi4arab.net

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