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

تطوير اداة جديدة للشبكات مثل ال Winsock في الفيجوال بيسك 6

بدأه رغيد الطيب في 12 يناير 2010 · 13 رد · 6,567 مشاهدة · في قسم الدروس والمواضيع المتميزة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

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

منذ ايام الـ VB 6.0 كنا قد استمتعنا كثيرا بالوينسوك وطورنا برامج عديدة للشبكة بإستخدمها ... وعندما جاءت الدوت نت ... تفاجىء الكثيرين بان الوينسوك اختفت وبدأنا عصر جديد وهو برمجة السوكت او الـ Sockets .... وهو عصر نفر منه الكثيرين وكرهوا التعامل معه بعد السهولة التي استمتعوا بها مع الوينسوك الحبيبة .... بينما وعلى النقيض تماما هاجت مشاعر الفرحة العارمة لذى البعض الآخر والذين احبوا هذا العصر الجديد كثيرا وشعروا بانهم اكثر قوة ولديهم مرونة اكبر طالما حلموا بها !!

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

من هذا المنطلق ارى بانه قد حان الوقت لإعادة إحياء تراث دثره الزمن و وجب في نظري إسالة لعاب الشباب من جديد لهذا المجال الرائع حتى نرى البرامج الشبكية تغزو منتداياتنا من جديد.

وهنا انا امام أمرين .... الاول هو الذهاب كما ذهب غيري من الشباب جزاهم الله عنا خيرا ... في شرح هذا الاسلوب البرمجي الجديد Sockets باانواعه واقسامه وادواته المتوفرة في اطال العمل كالـ (Socket, TcpClient, UdpClient ..... و و ) .... وكيفية التعامل معها خطوة بخطوة .

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

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

فأنا اؤمن بان الكثيرين يهدفون من البداية الى بناء برامج للشكبات من الوهلة الاولى

ودون ان الاضطرار الى تعلم كل صغيرة وكبيرة في كيفية الارسال و الاستقبال نفسها.

مثال على ذلك المستخدون القدامى (لا اعرف لما تذكرني العبارة السابقة بمصطلح المحاربون القدامى ؟!) للوينسوك قد استخدموها كثيرا في تصميم برامج اكثر من رائعة .... لكن القليل منهم فقط يعلم كيف تعمل هذه الاداة ؟! .... وما الذي يجري عندما تطلب امر الارسال او الاستقبال ... وكل ما تعرفه بان البيانات ذهبت الى الطرف الآخر .. كما انه اذا جاءت اي بيانات الى برنامجك فانه يوجد ببساطة يوجد حدث يعلمك بذلك DataArrival.

كان ذلك اكثر من كافي للكثير من المبرمجين .... وللأسف الشديد الامر ليس كذلك في الدوت نت!

فلايوجد احداث ولايوجد اشياء جاهزة تستخدمها ... اذا اردت شيئا ... اصنعه بنفسك! ... وهذا يشبه كثيرا اسلوب مطاعم Help Your Self ... أو اخدم نفسك بنفسك .... وهذا الاسلوب محبب لذى الكثيرين (مثلي ولكن في بعض الاحيان) .... ومكروه لذى الكثيرين (مثلي ايضا !! ولكن في اغلب الاحيان هذه المرة) ... فالكسل شيء قبيح اتصف به للأسف الشديد وهو امر لايستهان فيه ويكفي ان النبي الكريم صلوات ربي وسلامه عليه كثيرا ما كان يتعود من الكسل .... لهذا ارجوا ان لا يستهين الكُسالى بكسلهم وان لا يغضوا الطرف عنه ويتجاهلوه بل ان يكثروا بالتعوذ بالله العظيم منه.

ولكي لا اظلم نفسي وفئة كبيرة مثلي فنحن لسنا كُسالى بقدر كراهيتنا للراتبة ... فالرتابة في كل شيء مميته و التكرار وان كان يعلم الشطار فهو مدمر كالاعصار .... فلا احب ان اكتب عشرات السطور البرمجية (مرارا وتكرارا) ودائما كي ارسل رسالة من برنامج معين (المرسل) .... واكتب اكثر منها في الطرف الآخر(البرنامج المستقبل) كي استقبل رسائل برنامجي الاول.

نعم من المفيد ان يعرف الجميع ماذا يجري في الخفاء ... ولكن الاجمل ان تكتب اكوادك الخاصة التي تقوم بالارسال و الاستقبال الممل وتغلفها Encapsulation و تحقيق مبادىء الشفرة القابلة لإعادة الاستخدام Code Reuse وهو مبادىء يعرفها ويعيها تماما شباب البرمجة كائنية التوجة OOP.

فمن منا يكره ان يكون قادرا على ارسال رسالة الى كمبيوتر آخر بعيد في الشبكة بسطر واحد فقط مثلا :

skt.Send( "How are you Ragheed?" , "AnyComputerName",45000)

لاحظ ان الشفرة تستخدم متغير skt وهو اداتنا الجديدة بدل الوينسوك لإرسال رسالة فيها كيف حالك يارغيد "How are you Ragheed" الى كمبيوتر آخر اسمه AnyComputerName على المنفذ 45000.

وفي الجهة المقابلة (الكمبيوتر البعيد) أليس من الجميل ان يكون هناك حدث مثلا TextReceived يخبرنا بان هناك رسالة جديدة ... ويمكننا ا ن نعرضها ايضا بسطر واحد ! ... هكذا :

    Private Sub skt_TextReceived(ByVal Sender As Object, ByVal e As TextReceivedEventArgs) Handles skt.TextReceived
        MsgBox(e.Text,,"رسالة جديدة")
    End Sub

وهو ما ساقوم به هنا بإذن الله تعالى ... ساقوم بتغليف دوال الارسال و الاستقبال في الدوت نت في مكتبات dll خاصة بنا واصنع اداوات يمكننا ان نستخدمها في برامجنا بسهولة وسنبني سويا بعض البرامج الشبكية بإستخدامها.

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

تحياتي

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

تم تعديل هذه المشاركة بواسطة رغيد الطيب في 12 يناير 2010 في 11:09

2

مواضيع برمجية تقنية جديدة

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

• إستغلال خدمة الـ RSS في برامجنا ومواقعنا ! (VB.NET)

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

• برنامج للبحث في الملفات ومحتواياتها (VB.NET)

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

• فئة للتراسل بين برنامجين في جهاز واحد ! (VB.NET)

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

مواضيع برمجية تقنية قديمة

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

• إستغلال رسائل البالونات Balloons في الوينذوز أكس بي(VB.NET)

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

• مقالة : لماذا يجب ان نعتني بشفرات برامجنا !؟- (VB6.0)

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

• لمطوري البرامج و مواقع الويب - برنامج تركيب ألوان - (VB6.0)

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

• برنامج : بسيط للتحكم بالنظام, عن طريق الريجستري - (VB6.0)

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

• برنامج : لتقييد و منع تشغيل البرامج الاخرى - (VB6.0)

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

• النوافذ المنبثقة و طريقة لإستغلالها في برامجنا -(VB.NET)

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

• تقنية الإستدعاء الذاتي - (VB.NET , VB6.0)

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

• مصفوفات الأدوات Control Arrays افكار وتلميحات ! - (VB.NET)

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

• أفكار و تلميحات[ المعنى الحقيقي للـ True و False ] - أمثلة (VB.NETVB6.0)

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

• دوال الـ APIs و مايقابلها في الدوت نت ! - (VB.NET)

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

#2

متميز دائما أخى رغيد جزاك الله خيرا

فعلا عندك حق نفر الكثير جدا من اختفاء الوينسوك ولا أخفيك سرا أننى أحدهم مع أن الطرق الجديدة أقوى بكثير لكن الوينسوك أسهل بكثير جدا فى التعامل

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#3

بإذن الله عزيزي .... سوف اجعلك تشعر ان الوينسوك كانت معقدة الى حد جنوني ...مقارنة بما سوف نقوم به هنا

قول يالله يسدد الخطى

تم تعديل هذه المشاركة بواسطة رغيد الطيب في 12 يناير 2010 في 11:21

مواضيع برمجية تقنية جديدة

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

• إستغلال خدمة الـ RSS في برامجنا ومواقعنا ! (VB.NET)

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

• برنامج للبحث في الملفات ومحتواياتها (VB.NET)

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

• فئة للتراسل بين برنامجين في جهاز واحد ! (VB.NET)

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

مواضيع برمجية تقنية قديمة

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

• إستغلال رسائل البالونات Balloons في الوينذوز أكس بي(VB.NET)

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

• مقالة : لماذا يجب ان نعتني بشفرات برامجنا !؟- (VB6.0)

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

• لمطوري البرامج و مواقع الويب - برنامج تركيب ألوان - (VB6.0)

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

• برنامج : بسيط للتحكم بالنظام, عن طريق الريجستري - (VB6.0)

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

• برنامج : لتقييد و منع تشغيل البرامج الاخرى - (VB6.0)

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

• النوافذ المنبثقة و طريقة لإستغلالها في برامجنا -(VB.NET)

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

• تقنية الإستدعاء الذاتي - (VB.NET , VB6.0)

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

• مصفوفات الأدوات Control Arrays افكار وتلميحات ! - (VB.NET)

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

• أفكار و تلميحات[ المعنى الحقيقي للـ True و False ] - أمثلة (VB.NETVB6.0)

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

• دوال الـ APIs و مايقابلها في الدوت نت ! - (VB.NET)

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

#4

اهلا وسهلا بعودتك اخي العزيز رغيد الطيب 22 طلقة رصاص بعودتك لاثراء منتدى الفريق العربي في مجال تقنيات البرمجة

اشكرك على اثرائك للمحتوى البرمجي العربي بالعديد من المشاريع والبرامج المكتوبة بلغة vb.net

اما بالنسبة لادارة الاتصال الشبكي ... اعتقد ان خصائص وامكانيات الاداة في الدوت نت افضل بكثير مما كنا نستخدمة في vb6

واشكرك على مشروعك القيم في مجال برمجة الشبكات عن طريق الاداة

#5

الأخ الكريم بسام ..... بوركت الـ 22 طلقة وتسلم يد راميها عزيزي .... وسنستمتع سويا بإذن الله تعالى.

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

السلام عليكم

مواضيع برمجية تقنية جديدة

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

• إستغلال خدمة الـ RSS في برامجنا ومواقعنا ! (VB.NET)

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

• برنامج للبحث في الملفات ومحتواياتها (VB.NET)

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

• فئة للتراسل بين برنامجين في جهاز واحد ! (VB.NET)

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

مواضيع برمجية تقنية قديمة

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

• إستغلال رسائل البالونات Balloons في الوينذوز أكس بي(VB.NET)

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

• مقالة : لماذا يجب ان نعتني بشفرات برامجنا !؟- (VB6.0)

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

• لمطوري البرامج و مواقع الويب - برنامج تركيب ألوان - (VB6.0)

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

• برنامج : بسيط للتحكم بالنظام, عن طريق الريجستري - (VB6.0)

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

• برنامج : لتقييد و منع تشغيل البرامج الاخرى - (VB6.0)

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

• النوافذ المنبثقة و طريقة لإستغلالها في برامجنا -(VB.NET)

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

• تقنية الإستدعاء الذاتي - (VB.NET , VB6.0)

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

• مصفوفات الأدوات Control Arrays افكار وتلميحات ! - (VB.NET)

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

• أفكار و تلميحات[ المعنى الحقيقي للـ True و False ] - أمثلة (VB.NETVB6.0)

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

• دوال الـ APIs و مايقابلها في الدوت نت ! - (VB.NET)

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

#6

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

تم تعديل هذه المشاركة بواسطة psa في 13 يناير 2010 في 19:42

Chail .. Get Focus .. Then Catch Your Target

#7

بسم الله الرحمن الرحيم

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

الاصدار التجريبي الاول للآداة اضعه هنا للتجربة عليه واختباره كي اقوم بترقيع الاخطاء التي سيجدها الشباب ... فهي دعوة مفتوحة للجميع للمشاركة في اختبارها.

الاداة بحالتها الحالية اسمها rtaUDPSocket تحتوي على عدة خصائص و دوال واحداث ... وتعتمد على ارسال و استقبال البيانات بإستخدام بروتكول الـ UDP وفيما يلي لمحة بسيطة عنه.

بروتكول الـ UDP او الـ User Datagram Protocol

عبارة عن برتوكول لإرسال و استقبال البيانات بشكل غير مضمون التوصيل و الترتيب ... بما معناه انك اذا ارسلت عدة رسائل بإستخدام هذا البرتوكول فلايوجد اي ضمان بان جميع الرسائل ستصل اصلا وفي حالة وصولها لايوجد ضمان بوصولها بنفس الترتيب الذي اُرسلت عليه !! ... كما انه لايوجد ضمان بانها ستصل دون اخطاء !

فبالتالي فأي رسالة تُرسل بهذا البروتوكول هي عرضه للثلاثة مخاطر (الضياع اي عدم الوصول, ضياع تسلسل الارسال والاستقبال , الوصول مع بعض الاخطاء) وعلى الرغم من ذلك فكلا من هذه المخاطر هي نادرة الحصول غير ان حصولها يبقى جائزا.

قد يكون هذا الكلام صادما للبعض فما حاجتنا لبرتوكول كهذا ليس كبروتوكول الـ TCP الذي يضمن وصول البيانات تحت اي ظروف كما يضمن خلوها من اخطاء الارسال وكذلك ضمان وصولها متسلسلة بالشكل السليم.

طبعا وعلى الرغم من انني بدأت بعيوب هذا البرتوكول فان الاجابة تكمن في كون هذا البرتوكول له خصائص جميلة جدا تميزه عن برتوكول الـ TCP .... منها :

1 - السرعة .... حيث ان ارسال واستلام البيانات فيه اسرع بكثير من برتوكول TCP.

2 - عدم الحاجة الى انشاء اتصال دائم.

3 - امكانية البث الاداعي Boradcasting و Multicasting وفيه ارسال رسالة واحدة للشبكة كاملة او لجزء منها.

للتوضيح فأن سرعة هذا البرتوكول تجعله المفضل لبعض التطبيقات مثلا عند ارسال الفيديو المباشر (من كاميرا مثلا) او لنقل الصوت وخلافه فإن هذا البرتوكول اكثر فائدة واستخدام في اي برنامج يحتاج الى سرعة في ارسال الرسائل القصيرة نسبيا... فمثلا لن يضيرنا ان يحدث فقد بسيط في اجزاء صغيرة من الصوت او الصورة مقابل السرعة في ايصالهما. .... مثال آخر تخيل انك تريد التحكم بماوس جهاز بعيد فان استخدام هذا البرتوكول يجعل ارسال اوامر الماوس الى الجهاز البعيد اسرع بكثير.

الخاصية الثانية بهذا البروتكول هو انه لا يحتاج الى اتصال كامل بين الجهازين حتى يتم الارسال ... ففي حالة برتوكول الـ TCP لا يتم الارسال إلا بعد انشاء اتصال كامل بين الجهازين بحيث يرسل الاول طلب اتصال بالمنفذ المعين ثم يقبل الطرف الآخر الاتصال وبهذا يتم الاتصال ثم يبدأ الارسال وبعد انتهاء الاتصال يجب قطع الاتصال بين الجهازين.

Connect, Send , Disconnect

اما في برتوكول الـ UDP فلايستلزم الامر وجود الاتصال الكامل وانما عندما يتستخدم البرنامج هذا البرتوكول فان البرنامج المرسل يقوم فقط بارسال الرسالة الى الهدف دون الانتظار لكي ينجح الاتصال و يتحقق من وصول البيانات و يتأكد من صحتها.

حيث انك اذا ارسلت مثلا 100 رسالة قصيرة فان هذا البرتوكول سوف يقذف الرسائل الى الشبكة باتجاه هدفها ولن ينتظر للتأكد من وصولها بشكل سليم .... وهذا يجعله سريعا جدا في الارسال.

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

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

عودة الى الآداة rtaUDPSocket

تحتوي الاداة في اصدارها الاول التجريبي المرفق هنا على خمس خصائص هم :

RemoteIP

ويحتوي على اسم او عنوان الجهاز المراد الاتصال به.

RemotePort

يحتوي على المنفذ المراد الاتصال به.

ListenPort

يحتوي على المنفذ الذي سيتم انتظار الاتصالات الخارجية عليه.

IsListening

وهي خاصيه يمكن عن طريقها معرفة ما اذا كانت الاداة في حالة استماع.

SocketDataMode

وهذه الخاصية يمكن ان تكون واحدة من ثلاث قيم تحدد نوع البيانات التي سيتم ارسالها واستلامها:

النوع الاول هو TextMode

وهذا يعني ان الاداة ستقوم بارسال واستلام نصوص Strings ... مثال :

Dim Msg As String = "How Are You?"

skt.SocketDataMode = SocketDataModes.TextMode
skt.Send(msg)

النوع الثاني هو DataMode

وفيه سيتم التراسل عن طريق البيانات الثنائية Binary .. مثال :

Dim Data() As Byte = New Byte(){0,1 , 23, 5, 98}

skt.SocketDataMode = SocketDataModes.DataMode
skt.Send(Data)

والنوع الاخير هو CommandsMode

وهو مفيد لإرسال النصوص على شكل ازواج من الرسائل اي رسالة و امر

مثال:

skt.SocketDataMode = SocketDataModes.CommandsMode
skt.Send("NewMessage", "How Are You?")

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

والان الى الاوامر او الدوال التابعة لهذه الفئة ..... حيث ان لديها اربع اوامر او وظائف هي:

Send()

لارسال البيانات الى عنوان جهاز معين

Broadcast()

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

Listen()

وهو الامر المستخدم لإنتظار الرسائل على منفذ معين

Close()

وهو امر الاغلاق لإنهاء الانتظار على اي منفذ.

واخيرا وليس آخرا الاحداث التي تحتويها الاداة ... وهي تحتوي على اربعة احداث مختلفة هي

TextRecieved Event

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

ولمعرفة النص الذي تم استلامه ستجده في الخاصية Text التابعة للحدث بالشكل التالي :

   Private Sub skt_TextReceived(ByVal Sender As rtaUDPSocket, ByVal e As TextReceivedEventArgs) Handles skt.TextReceived

        MsgBox( e.Text, , "رسالة جديدة" )

    End Sub

ولمعرفة عنوان الكمبيوتر المرسل استخدم e.RemoteHost

DataReceived Event

هذا الحدث يتم تفجيره عند استام بيانات من اي كمبيوتر عندما تكون الخاصية SocketDataMode = DataMode

وفيه يتم استلام مصفوفة من البايتات عن طريق e.Data ...

CommandReceived Event

يتم تفجيل هذا الحدث عندما تكون الخاصية SocketDataMode = CommandsMode .. ويمكن عرض الرسالة و الامر اللذان تم استلامهما عن طريق الكود التالي :

    Private Sub skt_CommandReceived(ByVal Sender As rtaUDPSocket, ByVal e As CommandReceivedEventArgs) Handles skt.CommandReceived

          MsgBox( "الأمر المستلم هو : " & e.Command )
          MsgBox( "الرسالة المستلمة هي" & e.Message )

    End Sub

آخر الاحداث هو الحدث

Error Event

وهو الحدث الذي يتم تفجيره عند حصول اي خطأ

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

هذا بالنسبة للاصدار الاول من الاداة وهو ما زال تحت التجربة ... ولتجربه بسيطة تخيل ان لدينا برنامجين Program A و Program B ونريد ان نجعل البرنامج A يرسل الى البرنامج اي رسالة فيعرضها الثاني في مربع حوار ... كما نريده ان يحتوي على زر اذا ضغطنا عليه في البرنامج A يتم ارسال رسالة خاصة الى B ليغلق نفسه.

لعمل مثل هذا المثال البسيط سنقوم بتصميم البرنامجين مع بعض وسنبدأ بالاول:

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

تصميم البرنامج A

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

بما ان البرنامج A هو الذي سيقوم بالارسال الى البرنامج B فاننا سنكون بحاجة اولا الى اضافة الاداة rtaUDPSocketLibrary.dll المرفقة مع هذه المشاركة الى مشروعنا ..... وذلك عن طريق النقر على القائمة Tools من داخل الفيجوال استديو ثم تختار العنصر Choose Toolbox Items .... ثم سيظهر لك مربع حوار اضغط على الزر Browse فيه كي تختار ملف الاداة rtaUDPSocketLibrary.dll ..... وبهذا ستكون قد اضفت الى برنامجك ويمكنك استخدامها من صندوق الادوات.

قم باضافتها الى الفورم واعطها مثلا الاسم skt .... واجعل الخاصية SocketDataMode تساوي CommandsMode

واجعل الخاصية RemoteIP تساوي "127.0.0.1" ومعناه ان البرنامج الاخر B الذي سيتم الارسال اليه موجود في جهازنا الحالي (لاحظ ان العنوان 127.0.0.1 تعني الجهاز الحالي)

وغير الخاصية RemotePort بحيث تشير الى المنفذ الي ستتصل اليه في الجهاز الاخر وليكن مثلا 30000.

والان اضف مربعان نص الى الفورم الاول بإسم txtRemoteIP ليحتوي على عنوان الجهاز B في حال اراد المستخدم تغييره و الآخر بإسم txtMessage وفيه سيكتب المستخدم الرسالة المراد ارسالها.

واخيرا اضف اثنان من الازرار الى الفورم الاول اجعل الخاصية Text تساوي "Send" وهو لإرسال الرسالة .... والثاني بإسم Close لكي يرسل رسالة الاغلاق.

والان شفرة البرنامج الاول ستكون :

Imports rtaUDPSocketLibrary

Public Class Form1

    Private Sub txtRemoteIP_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtRemoteIP.TextChanged
        skt.RemoteIP = txtRemoteIP.Text
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        skt.Send("Msg", txtMessage.Text)
        txtMessage.Text = ""
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        skt.Send("Bye", "")
    End Sub
End Class

لاحظ انه عند الضغط على الزر الاول نرسل رسالة عن طريق الامر Send بعنوان Msg وفيها النص الموجود في مربع النص txtMessage

وعند النقر على الزر الثاني يتم ارسال رسالة فارغة بعنوان Bye كي يستلمها البرنامج الثاني ويقوم بإغلاق نفسه.

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

تصميم البرنامج B

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

البرنامج الثاني بسيط جدا لانه لا يقوم بشي سوى انتظار رسائل البرنامج الاول لذى فلن نضيف عليه اي ادوات غير اداة الاتصال تبعنا بالطبع skt وشفرته كالتالي :

Imports rtaUDPSocketLibrary

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        skt.Listen(30000)
    End Sub

    Private Sub skt_CommandReceived(ByVal Sender As rtaUDPSocketLibrary.rtaUDPSocket, ByVal e As rtaUDPSocketLibrary.CommandReceivedEventArgs) Handles skt.CommandReceived

        Select Case e.Command
            Case "Msg"
                MsgBox(e.Message, MsgBoxStyle.Information, "رسالة جديدة من " & e.RemoteHost)
            Case "Bye"
                Me.Close()
        End Select

    End Sub

End Class

نلاحظ انه يقوم اولا بالانتظار على المنفذ 30000 ثم في حال استلام اي رسالة يتأكد من نوعها e.Commad فإذا كانت Msg فهذا يعني انها مجرد رسالة فيعرضها في مربع حوار MsgBox

اما اذا كانت من النوع Bye فيقوم بإغلاق الفورم.

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

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

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

IP LAN Messenger

في الغد بإذن الله تعالى .

تحياتي في الملفات المرفقة تجدون الاداه rtaUDPSocketLibrary.dll بالاضافة الى البرنامجين للتجربة

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

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

Programs.zip

UDP Test Prorams.zip

مواضيع برمجية تقنية جديدة

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

• إستغلال خدمة الـ RSS في برامجنا ومواقعنا ! (VB.NET)

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

• برنامج للبحث في الملفات ومحتواياتها (VB.NET)

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

• فئة للتراسل بين برنامجين في جهاز واحد ! (VB.NET)

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

مواضيع برمجية تقنية قديمة

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

• إستغلال رسائل البالونات Balloons في الوينذوز أكس بي(VB.NET)

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

• مقالة : لماذا يجب ان نعتني بشفرات برامجنا !؟- (VB6.0)

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

• لمطوري البرامج و مواقع الويب - برنامج تركيب ألوان - (VB6.0)

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

• برنامج : بسيط للتحكم بالنظام, عن طريق الريجستري - (VB6.0)

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

• برنامج : لتقييد و منع تشغيل البرامج الاخرى - (VB6.0)

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

• النوافذ المنبثقة و طريقة لإستغلالها في برامجنا -(VB.NET)

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

• تقنية الإستدعاء الذاتي - (VB.NET , VB6.0)

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

• مصفوفات الأدوات Control Arrays افكار وتلميحات ! - (VB.NET)

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

• أفكار و تلميحات[ المعنى الحقيقي للـ True و False ] - أمثلة (VB.NETVB6.0)

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

• دوال الـ APIs و مايقابلها في الدوت نت ! - (VB.NET)

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

#8

اسأل الله ان يتقبل منك صالح الاعمال يا اخ رغيد فعلا

الموضوع اكثر من رائع ومميز:)

Chail .. Get Focus .. Then Catch Your Target

#9

اول ملاحظة يا استاذ رغيد هي ان اداة الاولى A إذا ارسلت رسالة الى الأداة B وكانت الأداة B

مغلقة فان الرسالة تضيع في هذه الحالة فماهو الحل ؟؟ وأين تكمن المشكلة في نظرك هل هي في

أداة الإرسال أم الإستقبال ؟؟

وجزاك الله خيرا على هذا المجهود الرائع

Chail .. Get Focus .. Then Catch Your Target

#10

السلام عليكم

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

اما اذا كنت تقصد انك تريد التاكد من وصول الرسالة فهنا انا انصحك ان تستخدم بروتكول آخر غير الـ udp لان هذه هي خصائصه .... وبغض النظر عن ذلك اذا كنت مصر ... فيمكن التلاعب قليلا وارسال رسالة من البرنامج B الى البرنامج A بعد كل ارسال ... بحيث يرسل البرنامج A الرسالة الى B وينتظر الرد فاذا جاءه رد فان هذا يعني ان الرساله وصلت.

تحياتي

السلام عليكم

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

لقد تم منذ قليل ‘نهاء الاصدار الثاني من الاداه وفيها الغيت الاوضاع

CommandMode و TextMode و استبدلتهما بالوضع الجديد الاكثر شمولية ObjectsMode

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

/index.php?showtopic=212998

تحياتي

السلام عليكم

__________________

تم تعديل هذه المشاركة بواسطة رغيد الطيب في 20 يناير 2010 في 07:06

مواضيع برمجية تقنية جديدة

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

• إستغلال خدمة الـ RSS في برامجنا ومواقعنا ! (VB.NET)

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

• برنامج للبحث في الملفات ومحتواياتها (VB.NET)

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

• فئة للتراسل بين برنامجين في جهاز واحد ! (VB.NET)

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

مواضيع برمجية تقنية قديمة

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

• إستغلال رسائل البالونات Balloons في الوينذوز أكس بي(VB.NET)

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

• مقالة : لماذا يجب ان نعتني بشفرات برامجنا !؟- (VB6.0)

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

• لمطوري البرامج و مواقع الويب - برنامج تركيب ألوان - (VB6.0)

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

• برنامج : بسيط للتحكم بالنظام, عن طريق الريجستري - (VB6.0)

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

• برنامج : لتقييد و منع تشغيل البرامج الاخرى - (VB6.0)

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

• النوافذ المنبثقة و طريقة لإستغلالها في برامجنا -(VB.NET)

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

• تقنية الإستدعاء الذاتي - (VB.NET , VB6.0)

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

• مصفوفات الأدوات Control Arrays افكار وتلميحات ! - (VB.NET)

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

• أفكار و تلميحات[ المعنى الحقيقي للـ True و False ] - أمثلة (VB.NETVB6.0)

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

• دوال الـ APIs و مايقابلها في الدوت نت ! - (VB.NET)

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

#11

اشكرك اخ رغيد على الرد

ولكن أقصد انه هل من الممكن تخزين الرسالة في مكان ما مؤقتا الى حين فتح البرنامج المستقبل B

كما يوجد في الماسنجر حيث تصلك الرسائل التي قام احدهم بكتابتها لك وانت غير متصل ( اوف لاين )

واشكرك مرة ثانية على الأداة المطورة الرائعة

تم تعديل هذه المشاركة بواسطة psa في 20 يناير 2010 في 16:33

Chail .. Get Focus .. Then Catch Your Target

#12

السلام عليكم

اخي الكريم نعم يمكن ذلك بتطبيق الاقتراح المذكور في ردي السابق بإذن الله تعالى.

ولبقية الشباب

مثال عن استخدام الاصدار الثاني للاداة في مراقبة شاشة كمبيوتر بعيد في الشبكة على الرابط التالي :

/index.php?showtopic=213056

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

تم تعديل هذه المشاركة بواسطة رغيد الطيب في 21 يناير 2010 في 05:59

مواضيع برمجية تقنية جديدة

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

• إستغلال خدمة الـ RSS في برامجنا ومواقعنا ! (VB.NET)

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

• برنامج للبحث في الملفات ومحتواياتها (VB.NET)

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

• فئة للتراسل بين برنامجين في جهاز واحد ! (VB.NET)

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

مواضيع برمجية تقنية قديمة

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

• إستغلال رسائل البالونات Balloons في الوينذوز أكس بي(VB.NET)

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

• مقالة : لماذا يجب ان نعتني بشفرات برامجنا !؟- (VB6.0)

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

• لمطوري البرامج و مواقع الويب - برنامج تركيب ألوان - (VB6.0)

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

• برنامج : بسيط للتحكم بالنظام, عن طريق الريجستري - (VB6.0)

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

• برنامج : لتقييد و منع تشغيل البرامج الاخرى - (VB6.0)

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

• النوافذ المنبثقة و طريقة لإستغلالها في برامجنا -(VB.NET)

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

• تقنية الإستدعاء الذاتي - (VB.NET , VB6.0)

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

• مصفوفات الأدوات Control Arrays افكار وتلميحات ! - (VB.NET)

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

• أفكار و تلميحات[ المعنى الحقيقي للـ True و False ] - أمثلة (VB.NETVB6.0)

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

• دوال الـ APIs و مايقابلها في الدوت نت ! - (VB.NET)

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

#13

شكرا لكم على فكرة الآداة البديلة rtaUDPSocketLibrary ، ولكن أرجو مساعدتي في تشغيلها أو كيفية استخدامها على vb.net 2005 لأن هذه المشاريع لم تشتغل على vb.net2005 وشكرا لكم مع أطيب تمنياتي لكم بالتوفيق والنجاح

#14

شكرااااااااااااا الله يعطيك العافيه وسلامه

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…