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

برمجة الSokets في الVb.Net

مغلق
بدأه DreamNet في 13 يوليو 2005 · 15 رد · 4,553 مشاهدة · في برمجة الشبكات والتطبيقات الموزعة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

يشمل رؤية جديدة للبرمجة على NET تختلف كثيرا عن ما رأيناه من قبل عند استعمالنا للوينسوك

في مثل هذه التطبيقات فالفئة المستعملة أو فضاء الأسماء الذي سيوفر لنا كل المتغيرات التي نحتاجها

لعمل برنامجنا هي Sockets

System.Net.Sockets

لن أطيل كثيرا عليكم لذلك سأحاول أن يكون الشرح مبسط كثيرا

نبدأ مع برنامج الخادم :

طبعا ان استعمال فضاء الأسماء Sockets لن يكون بالشكل السابق وانما نكتب

Imports System.Net.Sockets

نقوم بتعريف المتغيرات التي سنستعملها

في برنامجنا وهي

serv من النوع TcpListener يقوم بالاستماع كما يدل اسمه

client من النوع TcpClient يؤمن الاتصال بجهاز العميل

listenerThread هو عبارة عن ثريد يقوم بتنفيذ عملية استماع الخادم فقط

Private serv As TcpListener   
 Private client As TcpClient
 Private listenerThread As Threading.Thread

تهيئة الخادم:

لن أتحدث كثيرا عن تعدد المهام هنا لكن فقط أقول أنه أصبح استعماله سهلا بعد أن

وفرت لنا الNET الفئة Threading ,

نقوم بربط ثريد بإجراء يشغل الخادم ويقوم بانتظار اتصال من العميل ثم نشغل هذا الثريد

 listenerThread = New Threading.Thread(AddressOf DoListen)
 listenerThread.Start()

الإجراء

DoListen يقوم كما قلنا بتشغيل الخادم ولتشغيله نحتاج لمعرفة LocalEP و المنفذ

ولأننا سننشئ خادم فان الIP الذي سنستعمله سيكون محلي System.Net.IPAddress.Any

وكمثال نستعمل المنفذ 1000

عند اجراء اتصال بالخادم نقوم باسناد متغير من النوع TcpClient ليقوم بالتقاط الرسائل من العميل

 Private Sub DoListen()
        Try
            serv = New TcpListener (System.Net.IPAddress.Any,1000)
            serv.Start()
            Do
            client = serv.AcceptTcpClient ()
            MsgBox ("تم اتصال العميل بنجاح")
            Loop Until False
        Catch
        End Try
 End Sub

لا تنسى أن توقف الخادم عند اغلاق البرنامج في الحدث Form1_Closing

     serv.Stop()

برنامج العميل :

تهيئة العميل :

في برنامج آخر نقوم بانشاء متغير يقوم بالاتصال من النوع TcpClient بعد استدعاء فضاء الأسماء Sockets

طبعا

 Private client As TcpClient

وفي زر الاتصال نكتب:

 Try
   client = New TcpClient("127.0.01", 1000)
    MsgBox("تم الاتصال بنجاح")
 Catch
    MsgBox("الخادم غير متوفر الآن")
 End Try
#2

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

تابع

Private serv As Socket
Private client As Socket

ننشئ المقبس الذي يقوم بالاستماع

   Try
       serv = New Socket(AddressFamily.InterNetwork, _
       SocketType.Stream, ProtocolType.Tcp)
       ipLocal = New System.Net.IPEndPoint(System.Net.IPAddress.Any, 1000)
       serv.Bind(ipLocal)
       serv.Listen(1)
       serv.BeginAccept(AddressOf OnConnect, Nothing)
  Catch ex As SocketException
       MsgBox(ex.Message)
 End Try

نكتب الاجراء OnConnect الذي يقوم بقبول الاتصال

Private Sub OnConnect(ByVal ar As IAsyncResult)
           Try
              client = serv.EndAccept(ar)
              MsgBox("Client Connected")
           Catch se As SocketException
              MessageBox.Show(se.Message)
           End Try
 End Sub

وبالنسبة لبرنامج العميل يمكننا أيضا أن نكتب في زر الاتصال بعد أن نعرف m_Client كمقبس socket

Try
m_Client = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
Dim remoteIPAddress As System.Net.IPAddress = System.Net.IPAddress.Parse("127.0.0.1")
Dim remoteEndPoint As System.Net.IPEndPoint = New System.Net.IPEndPoint(remoteIPAddress, 1000)
 m_Client.Connect(remoteEndPoint)
 Catch
            MsgBox("الخادم غير متوفر الآن")
 End Try
#3

عارف لو زودت الشرح شويه وحطيت مثال ساعتها تبقي تمام التمام ,وجزاك الله خيرا,,,

#4

ارسال واستقبال البيانات :

لارسال واستقبال البيانات سنقوم باستدعاء BeginReceive ليبدأ المقبس المتصل باستقبال البيانات على شكل بيتات طبعا بعد الاتصال

من أجل هذا الغرض نعرف المتغير BufferRead الذي سيحمل البيتاتات المتلقاة

 Private BufferRead(1024) As Byte

يلزمنا لمزامنة الحدث انشاء اجراء يقوم بالتقاط النتائج أي البيانات وليكن OnRecieve

 
m_Client.BeginReceive(BufferRead, 0, 1024, SocketFlags.None, AddressOf OnRecieve, Nothing(

من المفروض أن نضع السطر السابق بعد حدوث الاتصال أي في الاجراء OnConnect المنشئ سابقا

الاجراء OnRecieve الذي يقوم بقراءة البيانات سيكون على النحو التالي:

 
Private Sub OnRecieve(ByVal ar As IAsyncResult)
        Dim Rx As Integer
        Try
            Rx = 0
            Rx = m_Client.EndReceive(ar)
            txtDataTx.Text = Encoding.Unicode.GetString(BufferRead, 0, Rx)
            m_Client.BeginReceive(BufferRead, 0, 1024, SocketFlags.None, AddressOf OnRecieve, Nothing)
        Catch
        End Try
    End Sub

في هذا الاجراء قمنا بقراءة طول البيانات المرسلة Rx ثم تحويلها باستمعال Encoding الى نص ومن ثم نعود لقراءة البيانات المرسلة من جديد باستدعاء الاجراء BeginReceive للمقبس

الآن كيف نرسل البيانات ؟

نستعمل الاجراء Send للمقبس فقط علينا تحويل النص الى بيتات Byte

m_Client.Send(Encoding.Unicode.GetBytes(TextBox1.Text()))

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

بالتوفيق للجميع

تم تعديل هذه المشاركة بواسطة DreamNet في 13 يوليو 2005 في 13:15

#6

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

#7

آه يا ريت لأن أنا كان آخري في VB 6.0 حاجات بسيطه جدا عن الوينسوك...........,,,

#8

خطأ مطبعي

Sockets بدل من sokets

كما قال أخ hazzoom أيام الvb6 كنا نستعمل الوينسوك ومع الدوت نت تغير الحال

Sockets هي طرق الاتصال المعروفة في الشبكة تسمح لتطبيق ما بالتحاور مع بروتوكول معين سواء محليا او على النت

والFramework تحوي على عدة فئات تسهل عمل برامج على الشبكة وتندرج كلها تحت فضاء الاسماء System.Net

#9

الموضوع رائع فعلا بس محتاج الى شوية توضيح

على العموم جهد جداجدا رائع وانا استفدت منه كثير

جزاك الله خيرا

#10

كما ذكرت في البداية هذا موضوع قديم لي كنت قد قدمته على vb4arab

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

#11

بس اكيد لازم يكون على جهاز العميل طبقة netframework ؟؟

صح والا انا غلطان ؟

والله يعطيك العافيه على العمل الممتاز والرائع جداً

وتقبل تحيتي

وفمان الله

(وقل ربي زدني علما)

#12

طبعا هذه أصبحت ضرورة بالنسبة لكل برامج .نت

أردت فقط إدراج كلاس تبسط التعامل مع الSockets لانشاء عميل او خادم والتراسل أيضا

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

فقط ملاحظة لقد سميت الكلاس Winsock وارجو أن لا نخلط الأمر هنا هي مجرد تسمية للتقريب فقط ليس لها أي علاقة بالwinsock

بالتوفيق دائما

Winsock.zip

#13

مشكووووووووووور أخوي وكثر الله خيرك

ولو توضح اكثر في إرسال وإستقبال البينات لاني مافهمت هذي النقطه وشكرا

#14

الله يعطيك العافية ...

اخوي ياليت مثال .. لإستقبال و ارسال البيانات .. [ مشاركة رقم اربعة ) ..... و لك جزيل الشكر ...

#15

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

كلاس الونسوك اللامتزامن

راكان الحنيطي

Be Open Source

opensource-550x4752.gif

#16

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

google.gif

spamxk4.gif

petitionbanner17a.gif

Email : sao_-5000@hotmail.com

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

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