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

التخاطب بين client ..و server...

مغلق
بدأه FOX_DELPHI في 9 فبراير 2003 · 14 رد · 1,659 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكـم......الى صانيعي برامج الشبكات ..:'(

أو من ينوبه ......

نسطيع أن نتخاطب بين server ..وال client:p

لكــــــــــــن عند تلقي ال server... الرسالة بفعل أمــر معين ..وبعد

الانتهاء من ذاك الأمر........:rolleyes:

...(( هــل بأمكاننا أرسال رسالة عكسية بحيث يفهم client...

أن ال server...قد قام بعمل معين ( بمعنى اخــر التخاطب

بينهما ....) عكســـياً...)):(

الهدف هو أرسال أوامر عبر شبكة محلية ..بين server..وال client...:mad:

لتبادل بعض الأوامر العادية ...........وبالعكس.......:mad:

مشكورين ..حاولوا تجنب طرح فكرة وضع Client 2 ..و Server 2;)

...................................................................ز

أخـــــــــــــوكم...:cool::cool:

#2

ال Server نفسه عادة يقوم في الحقيقة بعمل Server وClient ...

لو نظرت في كود مكونات Socket الخاص بال Server ستجد أن لديها مكون داخلي يعمل ك Client وذلك للارسال الرد إلي Client في الجهة الاخري ...

ومكون Client أيضا يحتوي علي معالج الاحداث للقراءة والارسال ، اظن انه من الممكن وضع الكود الخاص لارسال الأوامر في معالج الاحداث للقراءة ، بحيث تبعا للاوامر التي تم تسلمها في معالح احداث القراءة تقوم انت بارسال ما تريده من البيانات او الاوامر في داخل نفس المعالج وتستخدم الدوال مثل Socket.Write عامة ..

هذا ما لدي، ولا أستعمل المكونات عادة :)

#3

شكـــــرا ً للأهتمامك......اخــي العزيز.......(f)(f)

انا فعلاً ....لاحظت وجــود ...امكانية التراسل ..بينهما .....وطبقت مثال :'(

صغير ...ولكن لايستقبل ...الأمـــــــر لسبب مـــا :'(:'(على كل حال سأ حاول

مجدداً ..بعد دعمك الفني للموضوع....شكراً(gift)(f)(f)

#4

السلام عليكم.....

اخي العزيز...A`WaR

لقد قمت بعنل مشروع صغير ...علىأساس ....التخاطب بين Server وClient

ولكــــــــن لم يستجب الServer ... إلا على امر واحد فقط من عدة أوامر

ماهي المشكلة برأيك ....مع العلم أنني جربته كثيراً وبأكثر من طريقة

على أعتمادي في موضوع أرسال string نص يعني ..............

مشكـورا مقدماً ....(f)(f)

اخوك....:cool:

#5

ما هو الـ component الذى تستعمله؟؟؟؟

#6

السلام عليكم....

أخـي أبراهيم ServerSocket1........ClientSocket1

هما الكمبونات المستخدم ؟...

ولكن ..ماهي الطريقة التي ..يمكنني أرسال أكثر من ملف نصي

فعال للسيرفر ...مع العلم ..والتجربة ..انه السيرفر ..لايستقبل إلا

أمــر واحد مرسل له من ...الClientSocket1

أرجـــــــو المساعدة:cool:

#7
اقتباس
]

   

  أمــر واحد مرسل له من ...الClientSocket1

  أرجـــــــو المساعدة:cool:

هل انت متاكد من وضع الشرط

clientsocket1.active:=true

قبل الcommand :P

واذا لم يكن كذالك:rolleyes:

الرجاء وضع الكود الذي تكتبه

(f)

(f)

(f)

.

.

.

read

#8
اقتباس
كاتب الرسالة الأصلية : FOX_DELPHI

السلام عليكم.....

  اخي العزيز...A`WaR

  لقد قمت بعنل مشروع صغير ...علىأساس ....التخاطب بين Server وClient

 

   ولكــــــــن لم يستجب الServer ... إلا على امر واحد فقط من عدة أوامر  

 

  ماهي المشكلة  برأيك ....مع العلم أنني جربته كثيراً وبأكثر من طريقة

 على أعتمادي في موضوع أرسال string نص يعني ..............

  مشكـورا مقدماً ....(f)(f)

 

  اخوك....:cool:

أعزائي ...المشكلة ليست في الأرسال والأستقبال...المشكلة

عند ارسالي ...ملف نصي ...يراها السيرفر ويطبق مثلاً الكتابة بالريجستري

ولكــن ...أصدر رسالة ثانية من الكلا يونت ..لتفعيل أمــر أخر ..لا يستجيب

...مثلا أصدر رسالة Hhhh...وأستقبلها ..من السيرفر..:mad:

وأكتب عند أستقبالها ..اظهر رسالة Hi Hhhhhh...مثلاً ...;)

أنما أصدر رسالة غير الأولى ...لتفعيل رسالة اخرى في السيرفر ..نرى

السيرفر لايستجيب إلا ..على ..الرسالة الأولى المصدرة من الكلايونت

التي هــي...Hhhh....:'(

اما ثاني مشكلة ...وهي كيف لي ان اخبر الكلايونت أن السيرفر تبعك ...

هــــــــــو كــذا ..وأنا على شبكة محلية........وأنا لدي أكثر من 8 كلايونت

وعندي على الشبكة ..أكثر ...من 8 سيرفر ..كي لاتختلط ..الأمور بين

الكلايونتات .. والسيرفرات .....مع العلم لم اجرب لحد الآن ..برنامجي على

شبكة....وأشك ..بأن الحل يكون عبر

Se1.Socket.RemoteAddress

أو

Se1.Socket.RemoteHost

أو

Se1.Service

أرجــــــــو دعمكم للموضوع ..ومساهمتكم ...مشكورين ؟؟؟

كما أدعــــو الأخ A`War...مشكور ...(f)

#9

أســــــــــــــف أخ رضـــــــــــــا.....لك ماطلبت عزيزي.......:P:p:p

لا يوجد ثغرات ..عزيزي ؟؟؟؟أن شاء الله......(f)

procedure TForm1.Se1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
VAR F: boolean;
begin
//Memo1.Lines.Add(Socket.ReceiveText);
if Socket.ReceiveText ='Fox' then
begin
             f:=TRue;
       REG:=TREGISTRY.Create;
         REG.RootKey:=  HKEY_CURRENT_USER;
       IF REG.OpenKey('NETFOX', TRUE) THEN
       BEGIN
          REG.Writebool('Now',f) ;
            END;
       REG.CloseKey;
       REG.Free;


{else
begin
if Socket.ReceiveText = 'ttt' then
showmessage('Commen 2')
else
begin
if Socket.ReceiveText = 'ttt' then
showmessage('Commend 3');

end;
end;}
end;
END;

يوجد هنا محاولاتي في التخاطب .......ألغي كل شيء إلا كود

Memo1.Lines.Add(Socket.ReceiveText);

بالنسبة لأستقبال ....

أما للأرسال.........أكتب

 se1.Socket.Connections[0].SendText(edit1.Text) ;
  edit1.Text:='';

أرجــــــــــو الأستفادة....:cool:

#10

سيد فوكس

كما قلت لك ضع

مالي غلطان بإذن الله

ضع الشرطclientsocket.active:=true

عند الclient قبل الإرسال

بإذن الله سوف يعمل جربه

بعدين أنا قلت لك على الكود كي أساعدك فيه حيث أن الأكواد مقتلة بعضا

وبعدين أنا جبت من كم يوم كود خطييير (على أساس)

بعدين لاتتشاطر علي بالرجيستري بتعرفني نظام التشغيل عياره شهر عندي

بعدين هلق حنتحول على الlinux:cool:

بعدين

اقتباس

-----------------------------------------------------------------------------------

عند ارسالي ...ملف نصي ...يراها السيرفر ويطبق مثلاً الكتابة بالريجستري

---------------------------------------------------------------------------------

أمر نصي اسمه على ماأظن

شكرا لك على طرحك هكذا موضوع

أخيرا إذا كنت تريد نقل ملفات جرب الأمر

sendbuffer

أخوك أبو جواد

رضا(f)

#11

السلام عليكم......:D

مالي غلطان بإذن الله:mad:

ضع الشرطclientsocket.active:=true:'(

عند الclient قبل الإرسال:'(:'(:o

زعلتني منك اخي رضـــا....طبعاً عزبزي ....بدي أكتب ماقلته...

وكاتبه على شكل شيك بوكس,,,,,.... أتصال ..

procedure TForm1.ch1Click(Sender: TObject);
begin
if not cl2.Active then
  cl2.Active:= ch1.Checked
  else
  cl2.Active:=not cl2.Active;
end;

هذا اولاً .....ثانياً ..عزيزي ..انا ما كتبت لك كود الريجستري ..من شان

أتعدا على علمك الكبير ....بس كان هو الموجود الذي اعمل عليه

وجبته بطريقي ......:D

===========================

أمر نصي اسمه على ماأظن

===========================

شو لاحقني على الكلمة..على مهلك علي أنا أعلن انا لدي أخطاء

كتابية ..كثيرة لاحظ..ذلك.لسرعة الكتابة على الكيبورد.....:o

ثالثاً ..الحل وجدته ....في التخاطب بين السيرفر والكلايونت.....

هو وضع اكثر من كلايونت في طريقة كانت ...وأعطى كل كلايونت

أســــــــــم الHOST....الموجود عليه....السيرفر الذي تريد التخاطب

معه ..مباشرة دون غيره ...الطريقة أكتشقتها البارحة الساعة الثانية

صباحاًُ..مما يؤدي ...سبقتك ..في معرفة الحل ..رضــــــــــا:o:D

يعني ..عندي برنامج ...فيها كل كلايونت ..له أسم HOST

غير الاخــر ...موجه ..للسيرفر الخاص ....وبأمكانك ..أرسال

أمــر الى السيبرفر ..فيطبق ما تريده ....ويرسل لك ..السيرفر

أمــر الى الكلايونت...؟؟؟؟

شكرا لك أخ رضــــــــــــا؟؟؟؟وأرجــــــــو أن تعطيني مثال حي

على

أخيرا إذا كنت تريد نقل ملفات جرب الأمر

sendbuffer

مشكورا ً...(f)(f)

اخـــــــوك....:cool:

#12

السلام عليكم......:D

مالي غلطان بإذن الله:mad:

ضع الشرطclientsocket.active:=true:'(

عند الclient قبل الإرسال:'(:'(:o

زعلتني منك اخي رضـــا....طبعاً عزبزي ....بدي أكتب ماقلته...

وكاتبه على شكل شيك بوكس,,,,,.... أتصال ..

procedure TForm1.ch1Click(Sender: TObject);
begin
if not cl2.Active then
  cl2.Active:= ch1.Checked
  else
  cl2.Active:=not cl2.Active;
end;

هذا اولاً .....ثانياً ..عزيزي ..انا ما كتبت لك كود الريجستري ..من شان

أتعدا على علمك الكبير ....بس كان هو الموجود الذي اعمل عليه

وجبته بطريقي ......:D

===========================

أمر نصي اسمه على ماأظن

===========================

شو لاحقني على الكلمة..على مهلك علي أنا أعلن انا لدي أخطاء

كتابية ..كثيرة لاحظ..ذلك.لسرعة الكتابة على الكيبورد.....:o

ثالثاً ..الحل وجدته ....في التخاطب بين السيرفر والكلايونت.....

هو وضع اكثر من كلايونت في طريقة كانت ...وأعطى كل كلايونت

أســــــــــم الHOST....الموجود عليه....السيرفر الذي تريد التخاطب

معه ..مباشرة دون غيره ...الطريقة أكتشقتها البارحة الساعة الثانية

صباحاًُ..مما يؤدي ...سبقتك ..في معرفة الحل ..رضــــــــــا:o:D

يعني ..عندي برنامج ...فيها كل كلايونت ..له أسم HOST

غير الاخــر ...موجه ..للسيرفر الخاص ....وبأمكانك ..أرسال

أمــر الى السيبرفر ..فيطبق ما تريده ....ويرسل لك ..السيرفر

أمــر الى الكلايونت...؟؟؟؟

شكرا لك أخ رضــــــــــــا؟؟؟؟وأرجــــــــو أن تعطيني مثال حي

على sendbuffer.....مشكوراً (f)

أخـــــــوك....:cool:

#13

السلام عليكم..........

اخــــواني في المنتدى ....آسـف للتأخير ....

كنت مشغولاً جداً بموضوع التخاطب ...وبناء يرنامج تحكم ..كامل....

عن طريق الشبكة من خلال برنامج واحــد...بأكثر من 50 جهاز ..نعم

وأكثر .....وحاولت كثيراً ..لكي تنجح المهمة ..وأقدمها كمشروع في

مسابقة ..للبرمجة ..اليوم ظهراً ........:o

على كل حال .....سأجاوب على أسئلتي ....وسأبدء اليوم ...بموضوع

أستقبال السيرفر ..من الكلايونت ..اكثر من أمـــر ينفذه ..بحسب

المسج المرسلة له .......

procedure TForm1.Sv1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var s: string;

begin
    s:=socket.ReceiveText;
    begin
 if  s = 'GO' THEN
    openTimer(Sender);
  if s = 'END' then
   endTimer(Sender);
  if s = 'ME1' then
    showmessage( 'PLEASE  kEEP  QUITE THE ROOM ');
 if s = 'STOP' then
 BEGIN
 SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 0);
  END;
 if s = 'OK' then
 BEGIN
  SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, -1);
    END;

كما نرى عند تعريف متحول من نوع STRING نقوم بأرسال من الكلايونت

أكثر من أمـر ...هنا توابع API في حال كان المستخدم يقوم بلعب على

لعبة معينة ..وقد أنتهت المدة المحددة له ..أقوم بأرسال مسج من الكلايونت

STOP...فيستقبلها ....السيرفر فيقوم بأطفاء شاشة ..أجعله يفقد عقله:P

وعند أصدار أمــر OK..أكون قد سمحت له ..بمتابعة اللعب....وهكــذا ;)

ولنا لقاء أخــر ان شاء الله

أخــــوكم...:cool:

#14

في الواقع أخي وصديقي العزيزو الوحيد في البرمجة

إنما تحتاجه هو برتوكول للتخاطب كما في tcpip

فمثلا في شبكتك أنت

تستطيع تقسيم عملية الاتصال لطبقات

الطبقة الأولى :طبقة الاتصال مع الشيكة host to-network layer

الطبقة الثانية:طبقة الشبكة ولتكن (enternet ) مثلا

الطبقة الثالثة:طبقة النقل transport layer

الطبقة الرابعة وهي طبقة التطبيقات aplecation layer

أرجو أن أكون قد وضحت لك فكرة التخاطب

بالنسبة لسؤالك

حقك علي لقد فهمت سؤالك بشكل خاطئ طننت أنك تريد عمل sendtext

وإرسال رسالة واحدة فقط إلى السيرفر لكن الأن فهمت مبتغاك

سأجاوبك على قد المعلومات التي عندي وأنا الأن بعيد عن حاسبي المفضل

أنصحك بمكونات شركت indy

لأن clientsocket وserver socket قد استغني عنهما في delphi 7

كما أن هناك الكثيرمن الأمثلة المساعدة في موقع الشركة ومع نسخة delphi7

أنا لا أقول أنهما غير جيدان لمن لربما لن يخدمانك في حالتك أنت

كما أن الكلاس الذي أشار إليه الاستاذ awar هو كلاس مهم جدا

لكن أنت عليم التقرير ما ستستعمله في برنامجه

وأرجو من خبراء الشبكات(القلائل)مساعدتنا حتى نصل إلى طريقة مثلى

أنت بحاجة إلى توابع thread

هي توابع api تجعل من منهجيتين للعمل في نفس الوقت

كما أنك بحاجة إلى عمل disable للsocket

يمكن أن يفيدك هذا لرابط

http://www.duketown.com/index.shtml

كان بودي أن أقدم لك مساعدة أكثر من هذه لكنت أنت أعلم باظروف

(f)

#15

السلام عليكم...(f)(f)

شكرا لك أخ رضـــــــــا....وأرجــــو من الله التوفيق في دراستك...:'(

أخ رضــــــــا.....؟:o

أولاً : بالنسبة لبرنامجي أنتهيت من اصعب مرحلة فيه ..وانا أحاول

تطوير الفكرة ....وكما أستطعت ضبط موضوع الGAME`S...

بالإضــــــافة الى النت ....؟؟؟؟:P

ثانياً : والأن أبدء بالربط مع الداتا بيس عبر الشبكة ..وكيفية اتمتة الموضوع

ثالثاً: انت كنت أكبر مشجع لي في كتابة البرنامج .....لاتنسى ذلك ....;)

رابعاً : المسابقة لم تبدء بعد ومعي لنهاية الشهر ان شاء الله ..مما يعني

وقت أكثر .....؟؟؟؟؟:D:D:eek:

خامساً : ارجـــــــــو مراسلتي (( بلا تنبله:D))

أخـــــــــوك.....

:cool:

هذا الموضوع مغلق.

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