رغيد الطيب

الاداة البديلة عن الوينسوك - الاصدار الثاني

6 ردود في هذا الموضوع

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

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

اداة التراسل البديلة عن الوينسوك في الدوت نت - rtaUDPSocketLibrary الإصدار الثاني

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

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

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

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

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

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

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

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

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

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

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

Connect, Send , Disconnect

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

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

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

ملاحظة مهمة:

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

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

مكونات الإصدار الثاني لإداة rtaUDPSocket

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

RemoteIP

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

RemotePort

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

ListenPort

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

IsListening

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

SocketDataMode

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

النوع الأول هو DataMode

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


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

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

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

وهو مفيد لإرسال الكائنات على شكل رسائل تتكون من شقين الاول هو الأمر Command وهو عبارة عن نص قصير يمثل نوع او عنوان الرسالة والجزء الثاني الـ Object وهو عبارة عن الكائن الذي تم ارساله

مثال:


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

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

وبالتالي فانه بواسطة هذه الاداه يمكن ارسال اي كائن بسهولة ويسر ودون ان تقوم بذلك بنفسك ... فقط ارسل الكائن الذي تريده بإستخدام الامر Send وفي الطرف الاخر سوف يتم تفجير الحدث ObjectReceived .. تخيل معي ان لديك ثلاث متغيرات الاول عبارة عن صورة و الثاني عبارة عن عدد و الثالث عبارة نص.


Dim Img As Image = Image.FromFile("c:\....")
Dim msg as String = "How are you Ragheed?"
Dim num As Integer = 123

udp.Send("NewImage", Img, "192.168.1.200", 20202)
udp.Send("NewMsg", msg, "192.168.1.200", 20202)
udp.Send("NewNum", Num, "192.168.1.200", 20202)

لاحظ اننا لدينا هنا ثلاثة متغيرات img و msg وnum وكلها من انواع مختلفة ومع ذلك قمنا بارسالها بنفس الطريقة عن طريق Send الى العنوان 192.168.1.200 و المنفذ 20202.

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

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

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

DataReceived Event

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

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

ObjectReceived Event

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

مثلا في الشفرة السابقة ارسلنا ثلاثة متغيرات (صورة ونص وعدد) وعندما يتم استلامهم في الطرف الآخر سوف يتفجر هذا الحدث بالشكل التالي:


Private Sub udp_ObjectReceived(....) Handles udp.ObjectReceived
Select Case e.Command
Case "NewImage"
MsgBox("تم استلام صورة")
Me.BackgroundImage = e.Object
Case "NewMsg"
MsgBox(e.Object.ToString,,"تم استلام نص")
Case "NewNum"
MsgBox(e.Object.ToString,,"تم استلام رقم")
End Select
End Sub

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

Error Event

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

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

Send()

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

Broadcast()

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

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

Listen()

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

Close()

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

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

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

1 - برنامج شات داخل الشبكة بدون الحاجة الى استخدام سرفر.

2 - وبرنامج مراقبة سطح المكتب لكمبيوتر بعيد.

3 - وربما لاحقا برنامج مراقبة شاشات الكمبيوتر للمعلمين داخل الفصل.

تحياتي

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

post-40889-12639582707703_thumb.png

TestPrograms.zip

rtaUDPSocketLibrary.zip

2

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

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

http://www.arabteam2000-forum.com/index.php?showtopic=213056

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

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

و شكرا جزيلا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

مشكوور على الأدة أستاذ رغيب الطيب

:ty:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السيد رغيد الطيب

ألف شكر على الإفادة

عندي استفسار اذا سمحت

من خلال البرنامج B المستقبل هل أستطيع أن أحصل على رقم الأي بي IP المرسل للرسالة

يعني في حالة وصلني مسج من أكثر من جهاز كيف لي أن أعرف من أرسل الرسالة

و عندما أضط علىزر Ok في MessageBox هل هناك طريقة ليعرف المرسل بهذا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .