TheManager نائب رئيس مجلس الإدارة
عدد المساهمات : 25 نقاط : 103885 السٌّمعَة : 0 تاريخ التسجيل : 25/05/2010 العمر : 40 الموقع : eng.freevar.com
بطاقة الشخصية صنع في :.....: المود ايه (توداي): عايش وخلاص
| موضوع: مقدمة إلى ربط الأجهزة على الشبكات من خلال Sokets الثلاثاء مايو 25, 2010 7:14 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); أما لمبرمج 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# .
نكتفي بهذا القدر في هذا الدرس ، ونعود للمواصلة مع ارسال البيانات في درس قادم .
والله الموفق ... والسلام عليكم ورحمة الله وبركاته .
| |
|
Master_Mido Administration
عدد المساهمات : 443 نقاط : 113090 السٌّمعَة : 95 تاريخ التسجيل : 25/04/2010 العمر : 35 الموقع : https://i-t-center.ahlamontada.com
بطاقة الشخصية صنع في :.....: بلجاي المود ايه (توداي): عاشق ولهان
| موضوع: رد: مقدمة إلى ربط الأجهزة على الشبكات من خلال Sokets الأربعاء مايو 26, 2010 2:03 am | |
| جامد جدا الحوار دا في انتظار باقي الدروس يا بشمهندس | |
|
TheManager نائب رئيس مجلس الإدارة
عدد المساهمات : 25 نقاط : 103885 السٌّمعَة : 0 تاريخ التسجيل : 25/05/2010 العمر : 40 الموقع : eng.freevar.com
بطاقة الشخصية صنع في :.....: المود ايه (توداي): عايش وخلاص
| موضوع: رد: مقدمة إلى ربط الأجهزة على الشبكات من خلال Sokets الأربعاء مايو 26, 2010 6:16 am | |
| مرسى على المرور يا باشا وان شاء الله فية دروس تانية كتيرة
| |
|