تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
مقدمة إلى ربط الأجهزة على الشبكات من خلال Sokets - الجزء الأول
#1
كاتب الموضوع : أحمد جمال

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


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

ولتطبيق هذه الحالة يتم اللجوء لما يسمى بال Sockets ، ولمستخدمي فيجوال بيسك فقد كانت هناك أداة اسمها Winsock تقوم باستخدام هذه ال Sockets ، وفي .net سوف نقوم بالتعامل مباشرة مع المجال System.Net.Sockets .

وقبل البدء ، ففي مثالنا هذا سوف نتعامل مع Server (خادم) و Client (عميل) حيث يقوم الخادم بانتظار البيانات من العميل . ولكن قبل أن تتم هذه العملية فلا بد أولاً من التعرف على الخادم والعميل ، ويتم ذلك عبر ال IP الخاص بهما ، وفي حالة كونك تجرب المثال على جهازك الشخصي فإن ال IP لكل من السيرفر والعميل سيكون : 127.0.0.1 .

النقطة الأخرى التي لا بد من الاتفاق عليها هو رقم المنفذ ، ورقم المنفذ هو رقم Integer مع مراعاة انه في العادة فإن الأرقام الأولى يتم استخدامها من قبل نظام التشغيل .

في دورسنا هذه سوف نتعلم كيفية عمل Client مع Blocking ومن ثم سوف نواصل لنتعلم كيفية عمل ال Server مع Non-Blocking .

وسأحاول خلال الشرح الالتزام بالشرح بكل من C# و VB.net حيث سأوزع الكود بينهما وأتمنى أن يكون ذلك أيضاً بالنسبة للمرفقات . وأخيراً هناك الدرس المثبت في القسم والخاص بكيفية التحويل من C# إلى VB.net والعكس .

والآن خطوتنا الأولى هي رسم الشاشة ، حيث سنقوم بوضع مربعي نص واحد لرقم ال IP والذي سيكون 127.0.0.1 في حالة التجربة ، والآخر من أجل رقم المنفذ والذي سنفترض انه سيكون 10500 .
مربع نص ثالث مع زر أمر خاص بارسال البيانات ، ورابع مع زر أمر خاص بانتظار البرنامج حتى وجود بيانات تتم قرائتها حيث يقوم بالقراءة كل مدة معينة مبدئياً ، ولاحقاً سوف نتعرف على المشكلة من هذا النوع ونقوم بعمل حل بديل في الدروس القادمة ، وسوف نتعرف على جميع هذه العمليات تفصيلاً بإذن الله .

خطوتنا الأولى هي اضافة المكتبات التي نريد ، وكمبرمج فيجوال بيسك سوف تكتب السطر التالي :

كود :
Imports System.Net.Sockets
أما إذا كنت مبرمج سي شارب فستقوم بكتابة الأمر التالي :

كود :
using System.Net.Sockets;
الخطوة التالية هي تعريف متغير للسوكتس بالشكل التالي لمبرمج السي شارب :


كود :
m_socListener = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
أما لمبرمج VB.net فقم فقط بازالة ال ; من آخر السطر

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


كود :
Dim m_socListener As Socket
أما في C# فقط قم بكتابة :


كود :
Socket m_socListener
والآن إلى شرح الكود السابق :
في البارميتر الأول قمنا بتحديد نوع ال Adressing الذي سنقوم باستخدامه وهو InterNetwork وهو الخاص ب IP v4 ، وستجد رموزاً أخرى لأنواع مختلفة مثل AppleTalk .
البارمتير الثاني قمنا بتحديد نوع ال Sockets الذي نرغب في استخدامه وهو الذي يعتمد على مبدأ Streaming وأخيراً في البارميتر الثالث قمنا بتحديد نوع البروتوكول المستخدم والذي سيكون TCP/IP .
الخطوة الثانية هي بدء ربط هذا الكائن ، والذي سنحتاج في هذه الحالة إلى معرفة ال IP ورقم المنفذ Port وهو ما يوفره لنا النوع IPEndPoint والذي يمكن استخدامه بالشكل التالي - لو كنت مبرمج C# - :


كود :
System.Net.IPAddress ipAdd = System.Net.IPAddress.Parse(TextBox1.Text);
System.Net.IPEndPoint remoteEP = new System.Net.IPEndPoint (iAdd,Convert.ToInt16(TextBox2.Text);
m_socListener.Connect (remoteEP);
مبرمج VB.net ؟؟؟ إليك هذا الأمر :


كود :
Dim ipAdd As System.Net.IPAddress = System.Net.IPAddress.Parse(TextBox1.Text)
Dim remoteEP As System.Net.IPEndPoint = New System.Net.IPEndPoint(ipAdd, Convert.ToInt16(TextBox2.Text))
m_socListener.Connect(remoteEP)
والآن ننتقل إلى خطوة أخرى ، وهي اقتناص الأخطاء ، حيث أن الأخطاء التي يمكن أن تنتج عن هذا الكود كثيرة جداً ، لذلك سوف نستخدم try-catch ، وهكذا يصبح الكود في حالة VB.net :


كود :
Try

m_socListener = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
Dim ipAdd As System.Net.IPAddress = System.Net.IPAddress.Parse(TextBox1.Text)
Dim remoteEP As System.Net.IPEndPoint = New System.Net.IPEndPoint(ipAdd, Convert.ToInt16(TextBox2.Text))
m_socListener.Connect(remoteEP)
Catch ex As SocketException
MessageBox.Show(ex.Message)
End Try
أما في حالة C# فسيكون بالشكل التالي :


كود :
try
{
System.Net.IPAddress ipAdd = System.Net.IPAddress.Parse(TextBox1.Text);
System.Net.IPEndPoint remoteEP = new System.Net.IPEndPoint (iAdd,Convert.ToInt16(TextBox2.Text);
m_socListener.Connect (remoteEP);
}
catch(SocketException se)
{
MessageBox.Show ( se.Message );
}
والآن نعود لبدء أوامر ارسال البيانات ، وسنبدأ ببيانات تجريبية نرسلها خلال أمر Connect وذلك من خلال C# :


كود :
String szData = "Hello There";
byte[] byData = System.Text.Encoding.ASCII.GetBytes(szData);
m_socListener.Send(byData);
ومن خلال VB.net :

كود :
Dim szData As String = "Hello There"
Dim byData() As Byte = System.Text.Encoding.ASCII.GetBytes(szData)
m_socListener.Send(byData)
إلى هنا نكون قد انتهينا من أمر Connect ، والآن سننتقل سريعاً إلى أمر اغلاق الاتصال بالشكل التالي :


كود :
m_socListener.Close ()
وكما اتفقنا اضف ; فقط إذا كنت ترغب في أن تعمل من خلال C# .

نكتفي بهذا القدر في هذا الدرس ، ونعود للمواصلة مع ارسال البيانات في درس قادم .

والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .
}}}
تم الشكر بواسطة:



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم