![]() |
|
الاتصال بالشبكة بواسطة Udp وتبادل بيانات الاتصال - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي التقنية (https://delphi4arab.net/forum/forumdisplay.php?fid=6) +--- قسم : دلفي والتعامل مع الشبكات و الانترنت (https://delphi4arab.net/forum/forumdisplay.php?fid=21) +--- الموضوع : الاتصال بالشبكة بواسطة Udp وتبادل بيانات الاتصال (/showthread.php?tid=90) الصفحات:
1
2
|
الاتصال بالشبكة بواسطة Udp وتبادل بيانات الاتصال - merouane - 20-03-2008 السلام عليكم و رحمة الله تعالى وبركاته أحببت أن أواصل ما قدمته في مشروع برنامج محادثة (المشاريع الجماعية) لأقدم درسا بسيطا عن برمجة الشبكات عبر اللغة الجميلة دلفي (أعلم و أحذركم أنني ضعيف في ميدان الشروحات )، ولكي يحصل القارئ على أكبر قدر من الفهم لا بد له من أمرين : الــتــطــبــيــق – الــســؤال عن ما أشكل و العمل المهم بعد قراءة هذا الدرس البسيط هو الذهاب إلى الموارد الرئيسية أي كل ما صدر عن الشركات الأم و المطور الأساسي أولا نبدأ بتعريف الشبكات بنظرة عامة وبسيطة: الشبكة في المعلوماتية ما هي سوى ربط بين جهازين – أو أكثر – من الحواسيب، مثل الشبكة الهاتفية تجمع العديد من الناس، ومثل الطرق الرئيسية تجمع العديد من المدن ... و عندما يكون جهازين على اتصال (لا يهم طريقة الاتصال) نقول عنهم أنهما " ضمن الشبكة " أو " متصلين ". و الشبكة المعلوماتية مثلها مثل أي شبكة أخرى من نوع آخر، مثلا الشبكة الإدارية هي محددة بالآتي: من سيكون في الطرف (الشخص المعنوي أو الحقيقي) كيف سيتم التخاطب (البروتوكول المتبع) وكم المدة المحددة للتخاطب من المسؤول بين المتخاطبين لمن نعطي الأولوية للتخاطب كم عدد المشتركين في عملية تخاطب (مثلا اجتماع) ما هو شكل الشبكة لكي تصل المعلومة من أصغر موظف حتى الهيئة العليا هذه نبذة عن مفهوم الشبكة – فقط للذين يبرمجون بلغة الدلفي وليسوا معلوماتيين – و الشبكات أنوع منها المحلية (LAN) و شبكة ذات المساحة الواسعة (WAN) و الشبكات المتصلة ببعضها (Inter Net) نموذج ISO) International Standards Organisation) طُور بين 1977 و 1984 وهو غالبا ما يستعمل كقاعدة أو أساس لتوصيل المعلومات بين الحواسيب المتصلة خاصة الاتصال من نوع TCP/IP العنوان IP) Internet Protocol) و هو الرقم المعرف لكل حاسوب داخل الشبكة والذي نراه بالشكل 192.168.1.27 طرق نقل المعلومات: سأذكر طريقتين هما الأهم في عالم الأنترنت و كذلك المراد من هذا المقال TCP) Transmission Control Protocol) : و هو البروتوكول الخاص بعمليات النقل الموثقة (أي المتابعة) من ويكيبيديا : أهم ميزات الـ TCP هي ضمان إرسال الحزم إلى المستقبل كاملة بدون نقص أو فقدان ، وأيضا يقوم هذا البرتوكول برسم خط الذهاب والعودة للحزم من المرسل إلى المستقبل والعكس UDP) User Datagram Protocol) : و هو البروتوكل همه الوحيد توصيل المعلومة "بسرعة"دون التحقق من الوجهة أو الضمان ( وهذا ما سأستعمله لاحقا) وهذا البروتوكول شائع الاستعمال في برامج النشر مثل التلفاز و الراديو على الأنترنت وحتى برامج المحادثة. من ويكيبيديا: و بروتوكول يسمح بتناقل البيانات مثل TCP مع بعض الاختلافات الجوهرية من حيث طريقة التوصيل والتأكد من صحة المعلومات و سرعة التوصيل و احتمال الضياع. الآن نذهب إلى البرمجة (لا أظن المنتدى سيغلق الباب أمام السؤال عن الشبكات لغاية البرمجة ضمن دلفي) أول شيء لا بد لنا أن ندركه هو نظام التشغيل لأن الإتصال سيمر عبره و هو الوسيط بين التطبيق و الأجهزة الإلكترونية مثل بطاقة الشبكة. فنظام التشغيل (مثل الويندوز) يوفر لنا Socket التي يتم عبرها الاتصال بالشبكة، و هي توفر للمبرمج سهولة و يسر لإخراج برنامج إلى الحياة . و WinSock عبارة عن API التي تزودنا بالإجراءات لاستعمال بروتوكولات الشبكة. أما من الناحية البرمجية فيوجد مكونات تسهل اكثر التعامل مع الشبكات (كما يمكننا استعمال WinSock مباشرة – إلا أنه حل بالنسبة لي غير مرحب به، فالمكونات مثل indy طورها مجموعة من المهندسين و أفرغوا لها وقتهم فأين أنا الوحيد البسيط ضمن المجموعة المثقفة ذات الإمكانيات، إلا إذا أردت استعمال بعض الإجراء الأساسية ذات المستوى السفلي) لغة البرمجة دلفي (القوية) و من خلال indy توفر لنا التعامل بكل بساطة وقوة و ربح وقت لبرمجة تطبيقات أو خدمات شبكية سريعة وثابتة ربما يتقدم أحد الأخوة في المنتدى من لهم خبرة اكثر مني في الشرح و التعامل مع indy أن يتقدموا بالشرح مع بعض الأمثلة. الآن وبعد الانتهاء من الأساسيات ننتقل إلى المطلوب.. مثال عن إرسال و استقبال عن طريق UDP دون معرفة الطرف الآخر ثم استخلاص البيانات المطلوبة لربط آمن و موثوق. سوف نستعمل دلفي 7 (بالنسبة لي أستعمل Delphi 7 Entreprise FR) و indy 9 نشغل الدلفي وننشئ تطبيق جديد (دائما احفظ مشروعك في مجلد عملك) نسمي المشروع Client أولا بالنسبة لظهور المعلومات لست بحاجة سوى إلى خمسة من نوع Label ليظهر منهم معلومات السرفر (المتصل الثاني) أسماوهم كالتالي (سأسميهم حتى يكون الفهم أحسن) [INDENT]Label1.Caption = Infos Serveur / Infos Server
بالطبع لا داعي لإدخالها برمجيا وإنما نستعمل جدول الخصائصLabel2.Caption = Host Name / Nom de serveur : Label3.Name = LHost Label3.Caption = ‘’ Label4.Caption = IP Label5.Caption = LIP Label5.Caption = ‘’[/INDENT] ![]() ثم نضيف TMemo الذي سوف نظهر فيه ساعة و تعريف المتصل، ونعطي Align قيمة alRight و نمسح جميع سطور Lines ثم نضيف TButton التي بواسطتها سنقوم بالبحث (كما في المستقبل نستطيع جعلها أوتوماتيكية – ذكية) نغير قيمة Caption إلى ‘Chercher / Find’ بالنسبة لوسائل الاتصال نذهب إلى طرف أين توجد مكونات indy ![]() في الأخير سيكون لدينا هذه النافذة البسيطة ![]() الآن العمل الأهم حدد IdUDPClient و اذهب إلى الخصائص ![]() سنختار 8060 بالنسبة للـ port و يمكن التغيير فيه فقط احذر من المخصصة مسبقا لنوع معين من الشبكات من المهم أن نعلم ان BroadcastEnabled هي الخاصية التي ستسمح بعملية النشر لذلك هي True للبقاء في نفس التسلسل لن ننتقل إلى المكون الآخر سنبقى قليلا مع Client1 نذهب للزر الموضوع سابقا في النافذة و ننقر عليه مرتين عند ظهور نافذة الشيفرة البرمجية نكتب ما يلي: كود : Client1.Send('255.255.255.255',8060,'OServer');هنا استعملنا البعث عن طريق مستقبل 255.255.255.255 (IP) عبر المنفذ 8060 و أرسالنا النص OServer IP : 255.255.255.255 هو العنوان المخصص للنشر وهو صحيح (أي يعمل) فقط إذا كان المستقبل من الشكل النشر BroadcastEnabled = True الآن نذهب إلى نافذة برنامجنا و نحدد IdUDPServer و ننتقل إلى الخصائص ![]() لاحظ أن الكل (Tous / All) أخذت العنوان 0.0.0.0 ثم ندهب لخانة Evenment و نضغط مرتين على onUDPRead بعد ظهور نافذة شيفرة البرمجة نكتب ما يلي: قبل البداية Begin كود : var DataStringStream: TStringStream;بعد Begin كود : DataStringStream := TStringStream.Create('');
try
DataStringStream.CopyFrom(AData, AData.Size);
if DataStringStream.DataString = 'OServer' then
begin
ShowMessage('Reçu : "' + DataStringStream.DataString + '" De : ' + ABinding.PeerIP
+' sur le port : ' + IntToStr(ABinding.PeerPort));
Server1.Send(ABinding.PeerIP, 8060, Server.LocalName);
Memo1.Lines.Add(Datetostr(Now)+' >>> ' + ABinding.PeerIP +' : +DataStringStream.DataString);
end
else
begin
ShowMessage('Serveur est trouver / Server has find');
Label1.Caption := DataStringStream.DataString;
Label2.Caption := ABinding.PeerIP;
end;
finally
DataStringStream.Free;
end;ثم توجه إلى أعلى حيث uses و أضف IdSocketHandle هنا نكون قد انتهينا من البرمجة و البرنامج .. على بركة الله ألم تلاحظوا شيئا كود : Client1.Send('255.255.255.255',8060,'OServer');كود : Server1.Send(ABinding.PeerIP, 8060, Server.LocalName);أليستا نفس العملية، إذا و بعد أن فهمنا أن هناك مرسل ومستقبل سنرتفع درجة نرجع إلى إجراء الزر ليصبح كود : Sender1.Send('255.255.255.255',8060,'OServer');ثم نحذف المكون IdUDPClient و لكي تعرفوا عجلتي لم ألاحظ أول وهلة حتى بدأت بهذا الدرس البسيط .. فشكرا لكم بعد كل ما مر ، على القارئ أن يجري بنفسه ربط من نوع TCP/IP كما يمكن أن أكون قد وقعت في خطأ (سهوا أو قلة معرفة) لذلك أرحب بجميع التعليقات .. فقط علقوا نبحث دائما عن زيادة المعرفة ثم نكثر من التطبيق حتى نحصل على برنامج مشرف.
تحياتي الاتصال بالشبكة بواسطة Udp وتبادل بيانات الاتصال - merouane - 20-03-2008 السلام عليكم حسنا سأكون أول المعلقين والمصححين أولا: Label5.Caption = LIP هي Label5.Name = LIP ثانيا: كود : DataStringStream := TStringStream.Create('');
try
DataStringStream.CopyFrom(AData, AData.Size);
if DataStringStream.DataString = 'OServer' then
begin
ShowMessage('Reçu : "' + DataStringStream.DataString + '" De : ' + ABinding.PeerIP
+' sur le port : ' + IntToStr(ABinding.PeerPort));
Server1.Send(ABinding.PeerIP, 8060, Server.LocalName);
[color=Blue] Memo1.Lines.Add(Datetostr(Now)+' >>> ' + ABinding.PeerIP +' : +DataStringStream.DataString);[/color]
end
else
begin
ShowMessage('Serveur est trouver / Server has find');
[COLOR=Blue] Label1.Caption := DataStringStream.DataString;
Label2.Caption := ABinding.PeerIP;[/COLOR]
end;
finally
DataStringStream.Free;
end;هي في الحقيقة كود : DataStringStream := TStringStream.Create('');
try
DataStringStream.CopyFrom(AData, AData.Size);
if DataStringStream.DataString = 'OServer' then
begin
ShowMessage('Reçu : "' + DataStringStream.DataString + '" De : ' + ABinding.PeerIP
+' sur le port : ' + IntToStr(ABinding.PeerPort));
Server1.Send(ABinding.PeerIP, 8060, Server.LocalName);
[color=Blue] Memo1.Lines.Add(Datetostr(Now)+' >>> ' + ABinding.PeerIP +' : '+DataStringStream.DataString);[/color]
end
else
begin
ShowMessage('Serveur est trouver / Server has find');
[COLOR=Blue]
LHost.Caption := DataStringStream.DataString;
LIP.Caption := ABinding.PeerIP;[/COLOR]
end;
finally
DataStringStream.Free;
end;عفوا و تحياتي
الاتصال بالشبكة بواسطة Udp وتبادل بيانات الاتصال - S.FATEH - 21-03-2008 شكرا عزيزي واصل ابداعك الدرس في وقته انا ايضا ادرس خصائص هذا الاتصال سلامي ال الامام الاتصال بالشبكة بواسطة Udp وتبادل بيانات الاتصال - STRELiTZIA - 21-03-2008 جزاك الله خيرا اخي مروان ![]() عندي ملاحظة صغيرة لتسهيل قراءة الــ Components المستعملة في برنامجك و تخص تسمية المكونات و خاصة اذا كبر حجم الــ Code - تسميتها تربح الوقت. - و تسهل العمل للمشاركين في التعديلات و الاضافات في حالة مشروع جماعي تحياتي الاتصال بالشبكة بواسطة Udp وتبادل بيانات الاتصال - merouane - 21-03-2008 العفو .. سنتقدم جميعا إذا علمنا ماذا نحتاج أي: الأسئلة ستعرفنا أي الطريق نسلك تحياتي ![]() STRELiTZIA كتب :عندي ملاحظة صغيرة لتسهيل قراءة الــ Components المستعملة في برنامجك و تخص تسمية الله ينورك أخي نعم ملاحظتك في محلها .. لكن - و قد ذكرتها بنفسك - في المشروع الجماعي و قد اتبعت نصيحة أخونا مهدي هـــنـــــا ليكون التناسق بين جميع الأعضاء ، و لا توجد مشكلة (نسمي المكونات أو نتركها كما هي) إذا اتفق الأغلبية حول طريقة عرض الدروس و أنا شخصيا أدعم رأيك لأنه إذا أراد أحدهم التقدم بخطوات ثابتة لا بد من التفكير كمبرمج أو مطور حسب العمل. تحياتي
الاتصال بالشبكة بواسطة Udp وتبادل بيانات الاتصال - wesamnet - 18-12-2010 جزاك الله خيرا على هذا الشرح الاتصال بالشبكة بواسطة Udp وتبادل بيانات الاتصال - WARD.MHM - 16-08-2011 السلام عليكم . . . اشكرك على الموضوع لكن ماذا تقصد بــ " إلا إذا أردت استعمال بعض الإجراء الأساسية ذات المستوى السفلي" ؟ الاتصال بالشبكة بواسطة Udp وتبادل بيانات الاتصال - amine0209 - 03-09-2011 أين اجد مكون المستخدم ؟ بحثت في كل التبويبات ولم اجده وانا استعمل delphi 7 second edition الاتصال بالشبكة بواسطة Udp وتبادل بيانات الاتصال - mahboub2011 - 27-09-2011 amine0209 كتب :أين اجد مكون المستخدم ؟ يجب عليك ان تحمله وتتبته في الدلفي 7 لا ياتي الاندي معه الاتصال بالشبكة بواسطة Udp وتبادل بيانات الاتصال - A.FATEH - 04-10-2011 السلام عليكم ورحمة الله هاك بعض المشاكل في الكود 1- sender1 غير معرف 2- لا يوجد خاصية localname في server1 استعمل دلفي 7 نسخة الاندي 9 |