14-10-12, 03:01 PM
كاتب الموضوع : أحمد جمال
بسم الله الرحمن الرحيم .السلام عليكم ورحمة الله وبركاته .
أصبح من أكثر التطبيقات المطلوبة شيوعاً هي التطبيقات التي تعمل على شبكة 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);
وقبل ذلك لا بد من تعريف نسخة m_socListener حيث يتم تعريفها في Gerneral في فيجوال بيسك بالشكل التالي :
كود :
Dim m_socListener As Socket
كود :
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);
كود :
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
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
كود :
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 );
}
كود :
String szData = "Hello There";
byte[] byData = System.Text.Encoding.ASCII.GetBytes(szData);
m_socListener.Send(byData);
كود :
Dim szData As String = "Hello There"
Dim byData() As Byte = System.Text.Encoding.ASCII.GetBytes(szData)
m_socListener.Send(byData)
كود :
m_socListener.Close ()
نكتفي بهذا القدر في هذا الدرس ، ونعود للمواصلة مع ارسال البيانات في درس قادم .
والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .