العودة   منتدى رياض الجنة - Riad Al-Ganah > الرياض التقنية > روضة الكورسات والدورات التقنية والعلمية > روضة دورات تقنية الـ .NET بلغاتها المختلفة > روضة دورات لغة الـ CSharp > دورة CSharp 2008 من منتدى فيجوال بيسك للعرب

دورة CSharp 2008 من منتدى فيجوال بيسك للعرب مقدم الدورة : الأخ طارق الدويري . حالة الدورة : متوقفة مؤقتاً . عدد الدروس حتى الآن : 23 درس

إضافة رد

  #1  
قديم 02-12-2010, 02:51 AM
الصورة الرمزية khaledbelal
khaledbelal khaledbelal غير متواجد حالياً
مبرمج المنتدى
الادارة تكليف لا تشريف
 
تاريخ التسجيل: Oct 2009
العمر: 34
المشاركات: 3,606
افتراضي الدرس 12: شرح تقنية WCF والتخصص بال Sockets مع مثال دورة C#

السلام عليكم ورحمة الله وبركاته...
اليوم وفي أول درس من المستوى المتوسط أولا سوف نقوم بشرح ال WCF بشكل عام ثم التخصص بالSockets


أولا: WCF : Windows Communication Foundation

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

- ما هي مجالات إستخدام ال WCF ...
لا تظن أن تقنية ال WCF ظهرت من أجل غرض فقط بل يمكنك من خلالها القيام ب WebService وذلك كما سوف ترى في الدروس القادمة...

أن العمل على المجال العام للربط بين الأجهزة أو ماشابه ذلك يتم في المجال System.Runtime.Remoting

ولكن نحن لن نستخدمه أبدا لأننا سوف نستخدم شيئ أقوى من هذا المجال العام لهذا الغرض وهو ال Sockets ....


البداية مع ال Sockets:
لأدخلك من باب رائع في إستخدام ال Sockets أولا عليك فهم ما يلي:

1- IP Address :
وهو عنوان بروتوكول الإنترنت ويكون ال ip لكل كومبيوتر غير متصل بشبكة هو 127.0.0.1
أما الكمبيوتر المتصل بشبكة فسوف يكون رقم ما غير معين...

2- Port:
وهي المنفذ الذي يقوم البرنامج بالإنتظار بينما يقوم البرنامج الاخر بالإتصال على هذا المنفذ وتكون ال Port من تحديدك مثلا 1220...

- تكوينة برامج الإتصال...

أولا يجب أن تفهم مايلي:
1- أن كل برنامج من هذا النوع يتألف من Server و Cilent (( خادم و عميل ))
2- ما الخادم والعميل إلا برنامجان متصلان مع بعضهم البعض بواسطة IP Address و Port موحدة...
3- إن العميل هو الذي يرسل البيانات للخادم لكي يتم تنفيذ ما تريد...
4- إن الخادم مهمته إنتظار العميل بينما يقوم بالإتصال به عبر ال IPAddress الخاص بالجهاز الذي يملكه الخادم.


- مثال بسيط...

قم بإنشاء مشروع WindowsFormApplication جديد وسميه Cilent ...

وفتح ال Visual Studio مرة أخرى وقم بإنشاء مشروع Console Application جديد...

الان إذهب إلى ال Cilent وبدأ معي:

أولا قم بتعريف المتغيرين العامين التاليين على الشكل التالي:

كود PHP:
  Socket mysoc = new Socket(AddressFamily.InterNetworkSocketType.StreamProtocolType.IP); 
        
IPEndPoint PC******** = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1480); 
بدلا من النجوم ضع كلمة L ocation مع حذف المسافة بين حرفي الـ L و O
(( تنبيه للمنتقلين من المستوى المبتدئ متغير عام يعني أن يضع المتغير داخل Class وليس داخل دوال ما مثلا كما فعلنا الان فيكون الكود كاملا:

كود PHP:
namespace Cilent 

    public 
partial class Form1 Form 
    

        
Socket mysoc = new Socket(AddressFamily.InterNetworkSocketType.StreamProtocolType.IP); 
        
IPEndPoint PC******** = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1480); 
        public 
Form1() 
        { 
            
InitializeComponent(); 
        } 
    } 

قهكذا يكون المتغير عام ))

أولا سوف نشرح المتغير الأول mysoc وهو ال Socket المستخدمة لإقامة الإتصال بين البرنامجين وأما عن المعطيات فلا تقلق فشرحها سوف تجده ولكن الان يهمني أن تعلم أن اخر معطية هي أننا نود إستخدام ال IP Address لكي يجد البرنامجين بعضهما...

ثانيا: PC******** وهو متغير يتم من خلاله تحديد ال IPAddress وال Port للكومبيوتر لإستخدامها في ما بعد وأما عن الدالة Parse فقد تم شرحها في الدروس السابقة...

الان ضع ثلاثة Button وسم الأول Connect والثاني Disconnect والثالث Send Message

الان أدخل إلى الحدث Click الخاص بال Button1 واكتب...

كود PHP:
  if (mysoc.Connected == false
            { 
                try 
                { 
                    
mysoc.Connect(PC********); 
                } 
                catch (
Exception x
                { 
                    
MessageBox.Show(x.Message); 
                } 
            } 
            else if (
mysoc.Connected == true
            { 
                
MessageBox.Show("you are already connected to a server in:" mysoc.LocalEndPoint); 
            } 
وهنا قد إستخدمنا الأمر Connect كما هو واضح أعلاه حيث أعطيناه مكان الكومبيوتر الاخر...

** أظن أن هذا الكود واضح تماما **

والان إذهب إلى الحدث Click لل Button2 واكتب...

كود PHP:
  if (mysoc.Connected == true
            { 
                try 
                { 
                    
mysoc.Disconnect(false); 
                } 
                catch (
Exception x
                { 
                    
MessageBox.Show(x.Message); 
                } 
            } 
            else if (
mysoc.Connected == false
            { 
                
MessageBox.Show("your are not connecting to any server.."); 
            } 
والان إذهب إلى الحدث Click الخاص بال Button3 واكتب...

كود PHP:
     if (mysoc.Connected == true
            { 
                try 
                { 
                    
byte[] mymes = new byte[5]; 
                    
mymes[0] = 1
                    
mymes[1] = 2
                    
mymes[2] = 3
                    
mymes[3] = 4
                    
mymes[4] = 5
                    
mysoc.Send(mymes); 
                } 
                catch (
Exception x
                { 
                    
MessageBox.Show(x.Message); 
                } 
            } 
            else if (
mysoc.Connected == false
            { 
                
MessageBox.Show("Connect to server first!"); 
            } 
وهكذا نكون قد أتتممنا ال Cilent ...

__________________________________________________ ______________________

والان حان دور ال Server ...

كون السيرفر Console Application فإنه في حال فقدان جميع ال ForeTherads سوف يغلق البرنامج لذلك سوف نضطر إلى عمل Thread لا منتهية لحل هذه الأزمة...
(( لا يقلق الصاعدين من المبتدئ لأن هذا الموضوع لم أتطرق عليه بالدورة بعد ولكن وقته بات قريبا ))

قم بعمل ال Thread بالشكل التالي:

ولا قم بإضافة هذا الأمر:

كود PHP:
  static void infinity() 
        { 
            
System.Threading.Thread.CurrentThread.Suspend(); 
        } 
ثم ضف Thread وشغلها كالتالي:

كود PHP:
 System.Threading.Thread life = new System.Threading.Thread(infinity); 
            
life.Start(); 
فيصبح الكود كامل:

كود PHP:
namespace Server 

    class 
Program 
    

        static 
void Main(string[] args
        { 
            
System.Threading.Thread life = new System.Threading.Thread(infinity); 
            
life.Start(); 
        } 
        static 
void infinity() 
        { 
            
System.Threading.Thread.CurrentThread.Suspend(); 
        } 
    } 

والان لنبدأ بالسيرفر:

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

كود PHP:
   static Socket mysoc = new Socket(AddressFamily.InterNetworkSocketType.StreamProtocolType.IP); 
        static 
IPEndPoint PC******** = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1480); 
ثم بعد بعض الإضافات يكون الكود كاملا...

كود PHP:
using System
using System.Collections.Generic
using System.Linq
using System.Text
using System.Net.Sockets
using System.Net
namespace 
Server 

    class 
Program 
    

       static 
Socket mysoc = new Socket(AddressFamily.InterNetworkSocketType.StreamProtocolType.IP); 
       static 
IPEndPoint PC******** = new IPEndPoint(IPAddress.Any1480); 
        static 
void Main(string[] args
        { 
            
System.Threading.Thread life = new System.Threading.Thread(infinity); 
            
System.Threading.Thread listen = new System.Threading.Thread(filerec); 
            
listen.Start(); 
            
life.Start(); 
        } 
        static 
void infinity() 
        { 
            
System.Threading.Thread.CurrentThread.Suspend(); 
        } 
        static 
void filerec() 
        { 
            
mysoc.Bind(PC********); 
            
mysoc.Listen(5); 
            
Console.WriteLine("waiting for cilent..."); 
            
Socket cilent mysoc.Accept(); 
            
Console.WriteLine("connection accept!  receving data..."); 
            
byte[] msg = new byte[5]; 
            
cilent.Receive(msg); 
            
Console.WriteLine(msg[0].ToString()); 
            
Console.WriteLine(msg[1].ToString()); 
            
Console.WriteLine(msg[2].ToString()); 
            
Console.WriteLine(msg[3].ToString()); 
            
Console.WriteLine(msg[4].ToString()); 
        } 
    } 

والان لم يبقى عليك إلا تجربة البرنامج كالتالي...

إفتح الServer ثم إفتح ال Cilent وإضغط على زر Connect سوف تلاحظ إتصل ال Cilent بال Server
الان إضغط على زر Send Message فقوم ال Cilent بإرسال رسالة إلى ال Server ويقوم ال Server بتلقيها وطباعتها على ال Console


مبروك!! أول برنامج لك في عالم ال Sockets أصبح جاهزا...

يتبع في الدرس القادم إن شاء الله...

منقووووووووووول من منتدى فيجوال بيسك للعرب


توقيع : khaledbelal



(أَفَأَمِنَ أَهْلُ الْقُرَى أَن يَأْتِيَهُمْ بَأْسُنَا بَيَاتاً وَهُمْ نَآئِمُونَ {97} أَوَ أَمِنَ أَهْلُ الْقُرَى أَن يَأْتِيَهُمْ بَأْسُنَا ضُحًى وَهُمْ يَلْعَبُونَ {98}
أَفَأَمِنُواْ مَكْرَ اللّهِ فَلاَ يَأْمَنُ مَكْرَ اللّهِ إِلاَّ الْقَوْمُ الْخَاسِرُونَ {99}).
سورة الأعراف.

رد مع اقتباس
  #2  
قديم 02-14-2010, 02:47 AM
فهد المصري فهد المصري غير متواجد حالياً

عضو

 
تاريخ التسجيل: Jan 2010
المشاركات: 52
افتراضي

اسلوب بسيط وجيد
بارك الله فيك


رد مع اقتباس
  #3  
قديم 11-02-2010, 09:40 PM
الصورة الرمزية ماريا إسلام
ماريا إسلام ماريا إسلام غير متواجد حالياً

عضو متألق

 
تاريخ التسجيل: Oct 2010
العمر: 35
المشاركات: 268
افتراضي

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

جزاكم الله خيرراااا
وفقكم الله لماا يحب ويرضاا
،،،

//


توقيع : ماريا إسلام

ربي هذا العهد لك ... عزم القلب الوفا

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

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

صفحتي على الفيسبوك!

رد مع اقتباس
إضافة رد

أدوات الموضوع
انواع عرض الموضوع

تعليمات المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code is متاحة
كود [IMG] متاحة
كود HTML معطلة

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

المواضيع المتشابهه
الموضوع كاتب الموضوع المنتدى مشاركات آخر مشاركة
الدرس 10: تعرف على أهم ال Controls دورة ال C# khaledbelal دورة CSharp 2008 من منتدى فيجوال بيسك للعرب 1 10-31-2010 09:41 PM
الدرس 8: أمثلة عملية على ما مضى دورة الـ c# khaledbelal دورة CSharp 2008 من منتدى فيجوال بيسك للعرب 1 10-29-2010 08:01 PM
الدرس 4: طرق إستخدام ال void و ومجالاتها (دورة C#) khaledbelal دورة CSharp 2008 من منتدى فيجوال بيسك للعرب 1 10-29-2010 07:55 AM
الدرس 3: المتغيرات والثوابت (دورة الـ c#) khaledbelal دورة CSharp 2008 من منتدى فيجوال بيسك للعرب 1 10-29-2010 06:44 AM
الدرس 7: التعامل مع الملفات دورة الـ c# khaledbelal دورة CSharp 2008 من منتدى فيجوال بيسك للعرب 4 10-13-2010 07:04 PM

استضافة الحياة

الساعة الآن 09:01 PM.


Powered by vBulletin® v3.8.4, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. , TranZ By Almuhajir
النسخة الفضية
Ads Management Version 3.0.1 by Saeed Al-Atwi

SlamDesignzslamDesignzEdited by Riad Al-Ganah Team - جميع الحقوق محفوظة لشبكة رياض الجنة

Privacy Policy Valid XHTML 1.0 Transitional By SlamDesignz Valid CSS Transitional By SlamDesignz