delphi4arab منتديات دلفي للعرب
سؤال حول Indy (إرسال/إستقبال البيانات) - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : سؤال حول Indy (إرسال/إستقبال البيانات) (/showthread.php?tid=5928)

الصفحات: 1 2


سؤال حول Indy (إرسال/إستقبال البيانات) - ALmuhhnad - 08-02-2014

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

كنت قد اكتشف المكون Indy IRC وقمت بعمل برنامجين (Client/Server)

حيث يقوم الكلينت بالإتصال بالسيرفر .. وتتم عملية إرسال وإستقبال البيانات
لكني لم استطع جعل السيرفر يرسل البيانات إلى الكلينت.

وهذا تطبيقي على X4

السؤال هنا كيف اجعل السيرفر يرسل إلى الكلينت المتصل به ؟:confused:


سؤال حول Indy (إرسال/إستقبال البيانات) - Houdini - 09-02-2014

فكرة الـ irc تختلف عن اتصال العادي
يتم عمل اتصال اشبه ما يكون بالغرف بتصل عليها الـ clients و اي شي يكتب في تلك العرف يرسل الى جميع متصلين من client في الغرفة
لا ادري ادا يمكن للـ server ارسال ام يكتفي بالمعالجة الاتصال و غرف و امورها و رسائل فيهاا

الافضل استعمال برتكول الام لكل هدا tcp و معروف ك tidtcpserver - tidtcpclient


سؤال حول Indy (إرسال/إستقبال البيانات) - ALmuhhnad - 09-02-2014

حاولت ان اطبق ذلك من خلال tidtcpserver - tidtcpclient ونفس النتيجة .. لا أعرف ماهي الطريقة لجعل Server يستطيع إرسال بيانات إلى Clients

واعتقد ان Indy IRC هي نفس المكون الرئيسي Indy TCP وإنما فقط مضافه لها بعض الخصائص الخاصة بالغرف الجماعية وخصائصها ..


سؤال حول Indy (إرسال/إستقبال البيانات) - Houdini - 09-02-2014

من جهة سيرفر في بيئة الاندي هنالك نمطين من الاستقبال التلقائي للبيانات

1 - عبر الاوامر المسيرة بالاحداث command handler
2 - عبر حلقة يتم استقبال فيها البيانات المرسلة execute loop

اما ارسال فيكون عبر دوال write ln -wrtite string - write integer - write stream

* ممكن اسقبال بيانات عبر دوال ايضاا read ln -read string - read integer - read stream

اما الـ client ف فقط بالدوال


سؤال حول Indy (إرسال/إستقبال البيانات) - ALmuhhnad - 09-02-2014

طيب إذا تكرمت بمثال للسيريفر عن :
1 - عبر حلقة يتم استقبال فيها البيانات المرسلة execute loop
2 - الارسال عبر دوال wrtite string - write integer - write stream


سؤال حول Indy (إرسال/إستقبال البيانات) - ALmuhhnad - 10-02-2014

السلام عليكم ورحمة الله وبركاتة
أكتشفت طريقة إرسال البيانات إلى Clients ... وهي من خلال الكود التالي :
PHP كود :
procedure TForm1.Button3Click(Sender: TObject);
var
  
Clients : TList;
  
i : Integer;
begin
  Memo1
.Lines.Add('You : ' + Edit1.Text);  
  if 
not Assigned(IdIRCServer1.Contexts) then Exit;

  
Clients := IdIRCServer1.Contexts.LockList;
  for 
i := 0 to IdIRCServer1.Contexts.Count-1 do
  try
    
TIdContext(Clients.Items[i]).Connection.Socket.Write(Edit1.Text);
  finally
    
IdIRCServer1.Contexts.UnlockList;
  
end;
end; 



سؤال حول Indy (إرسال/إستقبال البيانات) - ALmuhhnad - 12-02-2014

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

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

هل يعرف احدكم السبب ؟


سؤال حول Indy (إرسال/إستقبال البيانات) - ALmuhhnad - 13-02-2014

.. أعتقد أني حصلت على الحل , وهو أن المكون Indy له طريقة في التعامل مع البيانات المرسلة
حيث أن الدالة : ReadLn
PHP كود :
AContext.Connection.Socket.ReadLn() 
تعمل كتالي :
في البداية تتلقى البياانات
وبعد ذلك تتلقى بيانات آخرى تشير إلى أن السيرفر انتهى من أرسال البيانات .. وفي حالتي انا لم اضع البارمترات الخاصة بالدالة .. لذلك اصبحت ( ترسل البياانات مره بعد مره كما ذكرت ) لذلك توجب علي أن اضع بارمترت وهو عبارة عن String يشير إلى نهاية إرسال البيانات كتالي :
PHP كود :
procedure TForm2.IdIRC1AfterCommandHandler(ASender: TIdCmdTCPClient;
  
AContext: TIdContext);
var
  
Msg : string;
begin
  Msg 
:= AContext.Connection.Socket.ReadLn('//FinishedSending//');
  
Memo1.Lines.Add('Server 1: ' + Msg)
end; 
واضيف تلك العبارة "//FinishedSending//" إلى أمر ارسال البياانات بعدة إنتهائي من إرسال البيانات في السيرفر

هذا ما استنتجته .. والسلام عليكم
وشكرا لك أخي Houdini


سؤال حول Indy (إرسال/إستقبال البيانات) - Sonic - 16-02-2014

لماذا العربي يظهر على استفهمات والدلفي لايقبل الترميز


سؤال حول Indy (إرسال/إستقبال البيانات) - ALmuhhnad - 16-02-2014

همم فعلاً .. ربما لم اكتب الكود الخاص بالترميز UTF-8 .. وكذلك نستطيع حل المشكلة بعمل دالة تستبقل باايانات Stream وتحولة إلى String العربي Smile