+ Reply to Thread
Page 3 of 9 1 2 3 4 5 ...
Results 21 to 30 of 85

 

Thread: تعلّم Csharp

  • Thread Tools
  1. #21 Collapse post
    ahmed adel ibrahem is offline
    Banned Array
    Join Date
    Oct 2013
    Posts
    89
    Accrued Payments
    7 USD
    Thanks
    0
    Thanked 1 Time in 1 Post
    شكرا على الكتاب القيم حقا انه مفيد
    وارجو منك ان تضيف كتب اخرى

    Though trading on financial markets involves high risk, it can still generate extra income in case you apply the right approach. By choosing a reliable broker such as InstaForex you get access to the international financial markets and open your way towards financial independence. You can sign up here.


  2. #22 Collapse post
    zied toumi is offline
    Banned Array
    Join Date
    Oct 2013
    Posts
    78
    Accrued Payments
    6 USD
    Thanks
    0
    Thanked 1 Time in 1 Post
    [RIGHT]في نموذج osi يتم تقسيم ال upper Layers الى ثلاثة طبقات
    Application لتعامل مع البرنامج نفسة او ما يسمى user interface
    Presentation تمثيل البيانات المرسلة وهي كما ظهرت سابقا بتحويل البيانات الى الASCII
    [FONT=tahoma]Session وفيها البدأ بعملية التخاطب بين الجهازين و التعريف ببعضهم البعض( فتح الجلسة) والتي سأتي على شرحها بعد قليل[/FO[/RIGHT]
    NT]
    اما في بروتوكول ال TCP/IP فكتفى بوجود طبقة Application والتي تقوم بعمل الطبقات الثلاث الأولى في OSI
    في session Layer يتم التعرف وفتح الجلسة بعدة خطوات وهي كما يلي :
    1- اجراء الإتصال المبدئي بجهاز server عبر ال IP و البورت المحدد وذلك بعد تحديد عملية الإتصال سواء عبر UDP او عبر TCP
    2- التعريف بنفسه وعمل ال Authentication اذا تطلب جهاز السيرفر ذلك
    3- قبول او رفض الجلسة ويتم ذلك بإرسال الموافقة على فتح الجلسة او رفضها
    4- بدأ الجلسة وقيام السيرفر بعمل Listening على البورت الخاص بالبرنامج

    عندما يتم الموافقة على فتح الجلسة والبدأ بعملية التخاطب يقوم جهاز المرسل Client بتحميل الرسالة الى الطبقة الأخرى وهي هنا طبقة Transport وفي هذه الطبقة يتم تحديد طبيعة الإتصال سواء عبر TCP - Connection Protocol او عبر ال UDP - Connectionless Protocol ففي البروتوكول الأول يتم تحديد طرفين وهما المرسل والمستقبل وبورت الإتصال اما ال UDP فيتم تحديد الطرف المرسل و المستقبل (اختياري) اي انه يمكن عمل ال Broadcast بدون تحديد جهة معينة لأستقبال الرسالة اي ان اي شخص يقوم بتنصت عبر هذا البورت Listening يستطيع استقبال الرسالة , وهنا مثال يوضح عمل هذه الطبقة

    TcpClient tcpclnt = new TcpClient(); // اختيار برتوكول التي سي بي لعملية الإتصالtcpclnt.Connect("192.168.0.2",8001);//حيث يلزم تحديد الطرف مستقبل الرسالة والبورت المخصص
    ولارسال الرسالة عبر الشبكة نستخدم في الدوت نت ميثود جاهز يقوم بهذه العملية ويسمى Network Stream وهو المسئول عن التعامل مع وسيلة الإتصال وارسال الرسالة الى الطرف المعني بشكل Stream Data او بستخدام ال Socket نفسه وكمثال على ذلك:


    NetworkStream mynetsream = tcpclnt.GetStream (); StreamWriter myswrite = new StreamWriter (mynetsream);myswrite.WriteLine("Your Message");
    وبعد ذلك تسلم الى Network Layer وهي مكون من Datalink Layer و Network Layer في OSI
    طبعا يتولى نظام التشغيل و بروتوكول TCP/IP ارسال الرسالة عبر الشبكة
    وهنا ملخص عمل كل من Network Layer و DataLink Layer

    Network layer :Layer 3 of the **** Systems Interconnection (OSI) reference model for networking. The network layer is responsible for functions such as the following:- Logical addressing and routing of packets over the network- Establishing and releasing connections and paths between two nodes on a network- Transferring data, generating and confirming receipts, and resetting connectionsExample about network layer : IP-internet protocol , ICMP -internet control message protocol , Routing DataLink layer: The link layer provides physically means Example : ARP Address Resolution Protocol , RARP Reverse Address Resolution Protocol.
    وبهذا قمت بشرح كيفية الإتصال عبر Layers .
    اما بنسبة للجهاز المستقبل Server يقوم بالمرور على نفس الطبقات ولكن بالعكس حيث يستلم كرت الشبكة البكت لتحول الى Datalink ثم Network ثم Transport ثم Application ومنها تحول من Binary الى Ascii ومن Ascii الى Text .. وهذه الكود يوضح مبدأ عمل ال Server

    TcpListener myList=new TcpListener("127.0.0.1",8001); // تحديد البورت والأي بي الخاص بسيرفر والذي سيتم التنصت عليهmyList.Start();// البدأ بعملية التنصتSocket s=myList.AcceptSocket(); // قبول اي طلب يأتي لفتح جلسة جديدة عبر السوكتbyte[] b=new byte[100];//تكوين مصفوفة لأستقبال الرسالةint k=s.Receive(b); // البدأ بلإستقبال والتحويل من الباينري الى الأسكي for (int i=0;i<k;i++)Console.Write(Convert.ToChar(b[i])); طباعة الرسالة بعد تحويلها من اسكيs.Close(); اغلاق السوكت
    في الدرس القادم سوف نتحدث بإذن الله بشكل اكثر تفصيلا عن السوكت وعن Threads وعذروني على عدم التفصيل ببعض الأمور وما ذلك الا بسبب ضيق الوقت ..الباب الأن مفتوح لنقاش واتمنى ان ارى منكم التفاعل


    ---------- Post added at 03:19 PM ---------- Previous post was at 03:14 PM ----------

    في نموذج osi يتم تقسيم ال upper Layers الى ثلاثة طبقات
    Application لتعامل مع البرنامج نفسة او ما يسمى user interface
    Presentation تمثيل البيانات المرسلة وهي كما ظهرت سابقا بتحويل البيانات الى الASCII
    Session وفيها البدأ بعملية التخاطب بين الجهازين و التعريف ببعضهم البعض( فتح الجلسة) والتي سأتي على شرحها بعد قليل
    اما في بروتوكول ال TCP/IP فكتفى بوجود طبقة Application والتي تقوم بعمل الطبقات الثلاث الأولى في OSI
    في session Layer يتم التعرف وفتح الجلسة بعدة خطوات وهي كما يلي :
    1- اجراء الإتصال المبدئي بجهاز server عبر ال IP و البورت المحدد وذلك بعد تحديد عملية الإتصال سواء عبر UDP او عبر TCP
    2- التعريف بنفسه وعمل ال Authentication اذا تطلب جهاز السيرفر ذلك
    3- قبول او رفض الجلسة ويتم ذلك بإرسال الموافقة على فتح الجلسة او رفضها
    4- بدأ الجلسة وقيام السيرفر بعمل Listening على البورت الخاص بالبرنامج

    عندما يتم الموافقة على فتح الجلسة والبدأ بعملية التخاطب يقوم جهاز المرسل Client بتحميل الرسالة الى الطبقة الأخرى وهي هنا طبقة Transport وفي هذه الطبقة يتم تحديد طبيعة الإتصال سواء عبر TCP - Connection Protocol او عبر ال UDP - Connectionless Protocol ففي البروتوكول الأول يتم تحديد طرفين وهما المرسل والمستقبل وبورت الإتصال اما ال UDP فيتم تحديد الطرف المرسل و المستقبل (اختياري) اي انه يمكن عمل ال Broadcast بدون تحديد جهة معينة لأستقبال الرسالة اي ان اي شخص يقوم بتنصت عبر هذا البورت Listening يستطيع استقبال الرسالة , وهنا مثال يوضح عمل هذه الطبقة


    ---------- Post added at 03:19 PM ---------- Previous post was at 03:19 PM ----------

    TcpClient tcpclnt = new TcpClient(); // اختيار برتوكول التي سي بي لعملية الإتصال
    tcpclnt.Connect("192.168.0.2",8001);//حيث يلزم تحديد الطرف مستقبل الرسالة والبورت المخصص
    ولارسال الرسالة عبر الشبكة نستخدم في الدوت نت ميثود جاهز يقوم بهذه العملية ويسمى Network Stream وهو المسئول عن التعامل مع وسيلة الإتصال وارسال الرسالة الى الطرف المعني بشكل Stream Data او بستخدام ال Socket نفسه وكمثال على ذلك:

    NetworkStream mynetsream = tcpclnt.GetStream ();
    StreamWriter myswrite = new StreamWriter (mynetsream);
    myswrite.WriteLine("Your Message");وبعد ذلك تسلم الى Network Layer وهي مكون من Datalink Layer و Network Layer في OSI
    طبعا يتولى نظام التشغيل و بروتوكول TCP/IP ارسال الرسالة عبر الشبكة
    وهنا ملخص عمل كل من Network Layer و DataLink Layer
    Network layer :
    Layer 3 of the **** Systems Interconnection (OSI) reference model for networking. The network layer is responsible for functions such as the following:
    - Logical addressing and routing of packets over the network
    - Establishing and releasing connections and paths between two nodes on a network
    - Transferring data, generating and confirming receipts, and resetting connections
    Example about network layer : IP-internet protocol , ICMP -internet control message protocol , Routing
    DataLink layer: The link layer provides physically means Example : ARP Address Resolution Protocol , RARP Reverse Address Resolution Protocol.
    وبهذا قمت بشرح كيفية الإتصال عبر Layers .
    اما بنسبة للجهاز المستقبل Server يقوم بالمرور على نفس الطبقات ولكن بالعكس حيث يستلم كرت الشبكة البكت لتحول الى Datalink ثم Network ثم Transport ثم Application ومنها تحول من Binary الى Ascii ومن Ascii الى Text .. وهذه الكود يوضح مبدأ عمل ال Server


    ---------- Post added at 03:20 PM ---------- Previous post was at 03:19 PM ----------

    TcpListener myList=new TcpListener("127.0.0.1",8001); // تحديد البورت والأي بي الخاص بسيرفر والذي سيتم التنصت عليهmyList.Start();// البدأ بعملية التنصتSocket s=myList.AcceptSocket(); // قبول اي طلب يأتي لفتح جلسة جديدة عبر السوكتbyte[] b=new byte[100];//تكوين مصفوفة لأستقبال الرسالةint k=s.Receive(b); // البدأ بلإستقبال والتحويل من الباينري الى الأسكي for (int i=0;i<k;i++)Console.Write(Convert.ToChar(b[i])); طباعة الرسالة بعد تحويلها من اسكيs.Close(); اغلاق السوكت
    في الدرس القادم سوف نتحدث بإذن الله بشكل اكثر تفصيلا عن السوكت وعن Threads وعذروني على عدم التفصيل ببعض الأمور وما ذلك الا بسبب ضيق الوقت ..الباب الأن مفتوح لنقاش واتمنى ان ارى منكم التفاعل

    Though trading on financial markets involves high risk, it can still generate extra income in case you apply the right approach. By choosing a reliable broker such as InstaForex you get access to the international financial markets and open your way towards financial independence. You can sign up here.


  3. #23 Collapse post
    zied toumi is offline
    Banned Array
    Join Date
    Oct 2013
    Posts
    78
    Accrued Payments
    6 USD
    Thanks
    0
    Thanked 1 Time in 1 Post
    الجزء الخاص ب Client
    using System.Net.Sockets;
    using System.IO;

    private void button1_Click(object sender, System.EventArgs e)
    {
    try
    {

    TcpClient myclient = new TcpClient ("127.0.0.1",5000); // الإتصال مع السيرفر
    NetworkStream mynetsream = tcpclnt.GetStream ();
    StreamWriter myswrite = new StreamWriter (mynetsream);
    mynetsream .WriteLine(txt_msg.Text);
    myswrite.Close ();
    mynetsream .Close ();
    myclient.Close ();

    }
    catch (Exception ex)
    {
    MessageBox.Show (ex.Message );
    }
    }
    الجزء الخاص ب Server
    using System.Net.Sockets;
    using System.IO;

    TcpListener mytcpl; // Objects Declaration
    Socket mysocket;
    NetworkStream myns;
    StreamReader mysr;
    mytcpl = new TcpListener (5000); // **** The Port
    mytcpl.Start ();// Start Listening on That Port
    mysocket = mytcpl.AcceptSocket (); // Accept Any Request From Client and Start a Session
    myns = new NetworkStream (mysocket);// Receives The Binary Data From Port
    mysr = new StreamReader (myns); // Convert Received Data to String
    MessageBox.Show (mysr.ReadLine()); // Print The Message
    mytcpl.Stop();

    يفضل اضافة هذه الميثود عند الحدث الخاص بإغلاق البرنامج
    private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
    try
    {
    mytcpl.Stop ();
    Application.Exit();
    }
    catch (Exception ex) {MessageBox .Show (ex.Message );}
    }


    ---------- Post added at 03:22 PM ---------- Previous post was at 03:21 PM ----------

    لدرس : الجزء الأول
    قمنا سابقا بتعرف على أجزاء OSI و TCP/IP وبينا كيفية التعامل مع هذه الطبقات في البرنامج , واليوم سوف اشرح بعون الله كيفية التعامل مع Socket بشكل أكثر تفصيلا بالإضافة إلى استخدام ال Thread في برمجيات الشبكة ..

    أولا : ال Socket : قلنا سابقا أن السوكت هي الأداة التي يتم نقل البيانات من خلالها من جهاز إلى أخر ولاستخدامها يلزم في البداية تعريف النيم سبيس System.Net.Sockets حيث يحتوي هذا النيم سبيس على عدد ضخم من الكلاسس والتي يتم استخدامها في برمجيات الشبكة , انظر الرابط التالي لتعرف على جميع المكونات في التفصيل :
    http://msdn.microsof...mnetsockets.asp
    و الرابط التالي لتعرف على مكونات System.Net بتفصيل:
    http://msdn.microsof...rfsystemnet.asp

    يمكنك السوكت من نقل Text او Object ,حيث بينا سابقا كيفية التعامل من السوكت لنقل Text وفي هذا الدرس سنبين كيفية التعامل معه لنقل Object , وكما هو الحال في نقل ال Text كنا نحول التكست الى اسكي ثم الى باينري اما في الأبجكت فيتم التعامل معه باستخدام ال Stream Library والتي يتم الوصول اليها من System.IO وتحتوي هذه المكتبة على Binary Reader و Binary Writer تمكنك من التعامل مع أي Object انظر الصورة المرفقة :

    Though trading on financial markets involves high risk, it can still generate extra income in case you apply the right approach. By choosing a reliable broker such as InstaForex you get access to the international financial markets and open your way towards financial independence. You can sign up here.


  4. #24 Collapse post
    zied toumi is offline
    Banned Array
    Join Date
    Oct 2013
    Posts
    78
    Accrued Payments
    6 USD
    Thanks
    0
    Thanked 1 Time in 1 Post
    [ATTACH=CONFIG]8162[/ATTACH]
    حيث تساعدك هذه المكتبة على تحويل أي اوبجكت إلى باينري باستخدام Binary Reader لتسهل إرساله عبر الشبكة باستخدام Network Stream ثم تحويله مرة أخرى إلى اوبجكت باستخدام Binary Writer , وكمثال تطبيقي على هذا سوف نقوم ببناء برنامج يقوم بعملية نقل الصورة من جهاز إلى أخر Client/Server وللبدء قم بإنشاء New Form جديد كما هو في الشكل التالي :
    Attached Images  

    Though trading on financial markets involves high risk, it can still generate extra income in case you apply the right approach. By choosing a reliable broker such as InstaForex you get access to the international financial markets and open your way towards financial independence. You can sign up here.


  5. #25 Collapse post
    zied toumi is offline
    Banned Array
    Join Date
    Oct 2013
    Posts
    78
    Accrued Payments
    6 USD
    Thanks
    0
    Thanked 1 Time in 1 Post
    في البداية قم بإضافة النيم سبيسس التالي :
    using System.Net.Sockets;using System.IO;
    للإجراء عملية الإرسال لا بد أولا من اخذ اوبجك من الكلاس MemoryStream والتي سوف نستخدمها لتخزين الصورة داخل الذاكرة بشكل Stream لكي نحولها لاحقا إلى مصفوفة Binary ثم إرسالها عبر NetworkStream إلى جهاز السيرفر والذي سأتي على شرحه في الجزأ الثاني من هذا الدرس, انظر الكود التالية :
    try{تحديد
    Name:  21_10_05_07_35_14_1129905314form1.JPG
Views: 14
Size:  36.5 KBالباث الخاص بصورة****FileDialog1.ShowDialog ();string mypic_path =****FileDialog1.FileName;pictureBox1.Image = Image.FromFile(mypic_path);MemoryStream ms = new MemoryStream(); pictureBox1.Image.Save(ms,pictureBox1.Image.RawFormat); تخزين الصورة ووضعها في مصفوفة من النوع بايتbyte[] arrImage = ms.GetBuffer();ms.Close();الاتصال بجهاز السيرفر عبر العنوان والبورت المحددTcpClient myclient = new TcpClient (txt_host.Text,5020);//Connecting with serverإرسال الصورة المخزنة إلى جهاز السيرفر NetworkStream myns = myclient.GetStream ();BinaryWriter mysw = new BinaryWriter (myns);mysw.Write(arrImage);//send the stream to above addressإغلاق السوكت والجلسة واللستريمmysw.Close ();myns.Close ();myclient.Close ();}catch (Exception ex){MessageBox.Show(ex.Message );}

    Though trading on financial markets involves high risk, it can still generate extra income in case you apply the right approach. By choosing a reliable broker such as InstaForex you get access to the international financial markets and open your way towards financial independence. You can sign up here.


  6. #26 Collapse post
    bozit is offline
    عضو جديد Array
    Join Date
    Aug 2013
    Location
    المغرب
    Posts
    98
    Accrued Payments
    9 USD
    Thanks
    0
    Thanked 0 Times in 0 Posts
    SubscribeSubscribe
    subscribed 0
    السلام عليكم ورحمة الله تعالى وبركاته
    معلومات جد مفيدة
    مشكور

    Though trading on financial markets involves high risk, it can still generate extra income in case you apply the right approach. By choosing a reliable broker such as InstaForex you get access to the international financial markets and open your way towards financial independence. You can sign up here.


  7. #27 Collapse post
    zied toumi is offline
    Banned Array
    Join Date
    Oct 2013
    Posts
    78
    Accrued Payments
    6 USD
    Thanks
    0
    Thanked 1 Time in 1 Post
    بسم الله الرحمن الرحيم
    الدرس الثاني: الجزء الثاني
    سوف ابدأ في هذا الجزء شرح الجزء الخاص بالسيرفر والذي يقوم بعملية التصنت على البورت واستقبال ال Stream عبر ال Binary Reader وتحويله إلى اوبجكت مرة أخرى , في هذا المثال نريد استقبال صورة وليس شيء أخر وفي هذه الحالة وفرت لدينا الدوت نيت خصائص جديدة في ال Controls الموجودة فيها ومن ضمنها خاصية Image.FromStream الخاصة ب ال PictureBox والتي تسهل علينا إمكانية عرض الصورة المرسلة من خلال Stream لكي يتم تحويلها من Binary Stream إلى صورة تعرض على ال Picturebox انظر المثال التالي :
    using System.Net.Sockets;
    using System.IO;
    -----------------------------
    // Objects Declaration

    TcpListener mytcpl; // Declare TCP Listener
    Socket mysocket; // Declare an object from Socket Class
    NetworkStream myns; //
    StreamReader mysr;
    -----------------------
    void Image_Receiver()
    {
    mytcpl = new TcpListener (5000);// **** The Port
    mytcpl.Start ();// Start Listening on That Port
    mysocket = mytcpl.AcceptSocket ();// Accept Any Request From Client and Start The Session
    myns = new NetworkStream (mysocket);// Receive The Binary Data From Port
    pictureBox1.Image = Image.FromStream(myns); // Show The Image that Resaved as Binary Stream
    mytcpl.Stop();// Close TCP Session

    if (mysocket.Connected ==true)//if Connected Start Again
    {
    while (true)
    {
    Image_Receiver();// Back to First Method
    }
    }
    }

    ولتطبيق قم بإنشاء New Form جديد كما في الشكل التالي :

    Though trading on financial markets involves high risk, it can still generate extra income in case you apply the right approach. By choosing a reliable broker such as InstaForex you get access to the international financial markets and open your way towards financial independence. You can sign up here.


  8. #28 Collapse post
    zied toumi is offline
    Banned Array
    Join Date
    Oct 2013
    Posts
    78
    Accrued Payments
    6 USD
    Thanks
    0
    Thanked 1 Time in 1 Post
    أضف الميثود السابقة في كلاس البرنامج ثم قم باستدعائها بواسطة وضع Image_Receiver()اما في ال Constructer الخاص بالبرنامج أو بحدث بدأ التشغيل الخاص بالفورم , وقم بوضع الميثود التالية في حدث Closing الخاص بالفورم :

    private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e){ try { mytcpl.Stop (); Application.Exit(); }catch (Exception ex) {MessageBox .Show (ex.Message );} }
    وذلك لتأكد من إغلاق السوكت عند إنهاء البرنامج ,..

    قم بإضافة الكود التالي الى ال Save لكي تتمكن من تخزين الصورة المستقبلة

    private void menuItem1_Click(object sender, System.EventArgs e) { try { saveFileDialog1.ShowDialog (); string mypic_path = saveFileDialog1.FileName; pictureBox1.Image.Save(mypic_path); } catch (Exception){} }
    قم بتشغيل البرنامج الآن ...
    ماذا تلاحظ !! لقد لاحظت أن البرنامج بطيء جدا لدرجة لا يمكن فيها فتح أي برنامج أخر , فكر بالسبب ..
    لن أترككم تفكرون كثيرا كون أن ذلك قد يؤدي إلى تعليق الجهاز بالكامل وخاصة إذا لم يتوفر لديك الحجم الكافي من ذاكرة الرام او إذا كان المعالج لديك بطيء نسبيا .. السبب في ذلك اللوب الذي لا ينتهي وعملية التصنت على البورت والتي لا تنتهي أيضا حيث أن البرنامج يعمل على الجزء العام والمخصص لإدارة نظام التشغيل في المعالج وهذا يعني انه لا يوجد مجال لفتح برنامج جديد إذ أن الموارد جميعها محجوزة , إذا ما هو الحل ....
    لقد وفرت الدوت نيت الحل لهذه المشكلة وهي باستخدام تكنولوجيا ال Threading والتي تسمح بالمعالجة المتوازية على نفس المعالج وذلك من خلال تقسيم المهام على المعالج وعمل Session منفصلة لكل برنامج وهو ما يسمى بال Multitasking.. وهنا لا يؤثر البرنامج على موارد النظام بشكل كبير انظر الشكل التالي :
    Name:  21_10_05_01_20_05_1129926005Form_Server.JPG
Views: 14
Size:  23.5 KB

    Though trading on financial markets involves high risk, it can still generate extra income in case you apply the right approach. By choosing a reliable broker such as InstaForex you get access to the international financial markets and open your way towards financial independence. You can sign up here.


  9. #29 Collapse post
    zied toumi is offline
    Banned Array
    Join Date
    Oct 2013
    Posts
    78
    Accrued Payments
    6 USD
    Thanks
    0
    Thanked 1 Time in 1 Post
    لاحظ انه قبل اضافة ال Thread كان البرنامج يعمل على منطقة ال Global Area وهذا هو سبب البطء الشديد وبعد استخدام ال Thread تم عمل Session خاص للبرنامج بحيث يعمل بشكل متوازي مع بقية البرامج ..
    ولاستخدام ال Thread في البرنامج يلزم أولا تعريف المكتبة او انيم سبيس الخاص به وهو

    using System.Threading;
    ثم قم باشتقاق اوبجكت منه وادرج اسم الميثود الذي تريد عمل Thread له كما يلي : اكتب هذا الكود في حدث بدأ التشغيل للفورم Form1_Load
    Thread myth;myth= new Thread (new System.Threading .ThreadStart(Image_Receiver));myth.Start ();
    ألان قم بإضافة Application.ExitThread في حدث ال Closing Form كما يلي
    private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e){ try { mytcpl.Stop (); Application.ExitThread (); Application.Exit(); }catch (Exception ex) {MessageBox .Show (ex.Message );} }
    ميزة ال Thread رائعة جدا اذ تمكنك من تشغيل اكثر من Thread وفي نفس الوقت وفي نفس البرنامج وهو ما يسمى بال Multithreading والذي سأتي على شرحه لاحقا بإذن الله .... انتظرونا في الدرس القادم .. أتمنى منكم التطبيق.


    ---------- Post added at 04:40 PM ---------- Previous post was at 03:32 PM ----------

    بسم الله الرحمن الرحيم
    الدرس : Connectionless Sockets Via UDP
    تحدثنا سابقا عن ال TCP – Connection Oriented Protocol وقلنا ان بروتوكول ال TCP هو بروتوكول موجه وهذا يعني انه يلزم احتواء ال Header الخاص به على عنوان المرسل و عنوان المستقبل كما يلزم ايضا القيام بعمليات التحقق Authentication و يدعم عمليات التحقق من الوصول و التسليم بشكل الصحيح .... لكن ماذا لو كان كل ذلك غير مهم بنسبة لك اذ تريد من برنامجك ان يقوم بعملية بث اذاعي Broadcast لرسالتك ولا يهمك من سوف يستلم الرسالة و ان السرعة في الإرسال و الإستقبال هي الهدف الأساسي اذا وجب عليك ترك بروتوكول ال TCP والتوجه نحو ال UDP User Datagram Protocol ويسمى ايضا بال Connectionless Protocol في هذا البروتوكول تستطيع عمل ما يسمى بال Broadcast و ال Multicast (البرود-يعني الإرسال الى الكل و الملتي-يعني الإرسال الى مجموعة اثنان او اكثر واليوني-يعني الإرسال لواحد فقط) يوجد شرط وحيد يلزم ان تأخذه بعين الإعتبار عند استخدام ال UDP لعملية البث بستخدام Broadcast وهو ان الشبكة التي تريد عمل بث لها تتصل معها بشكل مباشر Direct Connection اي بدون وجود Router بينك وبين المستقبل اذ ان ال Router يمنع عمليات البث الإذاعي Broadcast حيث يلزم ان تكون الشبكة ضمن ال Range Class سواء A او B او C
    لأستخدام ال UDP يلزم اولا تعريف النيم سبيس System.Net و ال System.Net.Socket لاحظ انه في ال TCP كان يلزم تعريف رقم البورت والعنوان للجهاز المستقبل اما في ال UDP فتستطيع تعريفه كما هو في TCP كما وتستطيع عمل Broadcast بستخدام IPAddress.Any بعد اشتقاق كائن من الكلاس IPEndPoint (وتعني نقطة الهدف) وتستطيع ايضا عدم تحديد رقم البورت وذلك بستخدام الميثود Bind() حيث يتم تعريفها بنقطة الهدف ب 0 ويتم كل ذلك كما يلي كمثال :
    التالي هو الجزء الخاص بالسيرفر ووظيفته فتح البورت 9050والتنصت عليها ثم استلام الرسالة عبر هذا البورت وتوزيعها على الكل بدون تحديد رقم بورت معين حيث يتم تسليمها على البورت المخصص لعملية البرودكاست وهو البورت صفر:

    ---------- Post added at 04:42 PM ---------- Previous post was at 04:40 PM ----------

    لتعريف نقطة الهدف ورقم البورت الخاصة بسيرفر ونستخدمها لكي يقوم السيرفر بستلام الرسالة
    IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9050);

    لتحديد نوع البرتوكول المستخدم يتم ذلك كما يلي
    Socket newsock = new Socket(AddressFamily.InterNetwork,
    SocketType.Dgram, ProtocolType.Udp);

    ثم اعطاء نقطة الهدف ورقم البورت الى الميثود بيند ويستخدم هذا الميثود عند الإستقبال فقط
    newsock.Bind(ipep);

    الأن تم استقبال الرسالة ونريد بثها الى كل من يتصل مع السيرفر على البورت السابقة ولعمل ذلك يلزم اولا تعريف نقطة الهدف كما يلي
    IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
    EndPoint Remote = (EndPoint)(sender);
    لاحظ ان عنوان نقطة الهدف هو اني ورقم البورت صفر وهذا يعني ارسال الرسالة المستلمة الى الكل وبما فيهم الشخص مرسل الرسالة و السيرفر

    هنا يتم استلام الرسالة من السيرفر الى السيرفر مرة اخرى عبر الشبكة
    recv = newsock.ReceiveFrom(data, ref Remote);

    لطباعة عنوان مرسل الرسالة و الرسالة نفسها
    Console.WriteLine("Message received from {0}:", Remote.ToString());
    Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));

    نقوم هنا بإرسال رسالة ترحيبية لكل جهاز جديد يشبك على السيرفر نخبره بها انه تم الموافقة على دخوله ضمن الأجهزة طبعا هذه رسالة اختيارية تستطيع حذفها اذا كنت لا تريدها
    string welcome = "Welcome Customer ...";
    data = Encoding.ASCII.GetBytes(welcome);
    newsock.SendTo(data, data.Length, SocketFlags.None, Remote);

    هنا لوب لا نهائي الهدف منه هو عدند استقبال اي رسالة في اي وقت من قبل اي جهاز يقوم السيرفر بستلامها وتسليمها الى كل من هو على الشبكة ... اذا اردت تحديد عدد معين من الرسائل المستلمة تستطيع تغيير الترو الى اي رقم تريده
    while(true)
    {
    data = new byte[1024];
    recv = newsock.ReceiveFrom(data, ref Remote);

    Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));
    newsock.SendTo(data, recv, SocketFlags.None, Remote);
    }
    هنا يتم اغلاق السوكت في حالة اذا تم الخروج من اللوب الا نهائي طبعا هنا لن يتم الوصول الى هذه النقطة الا اذا وضعنا كلمة بريك داخل الوب وفق شرط معين وهنا نستطيع وضع جملة شرطية انه في حالة استقبال رسالة او نص رسالة معينة اخرج من اللوب وقم بإغلاق السوكت وهذا يعني انك تستطيع عمل تحكم عن بعد للإغلاق السيرفر كما يمكنك وضع جملة تشغيل اي ملف تنفيذي على السيرفر في حالة ورود نص معين وهكذا
    server.Close();

    ---------- Post added at 04:43 PM ---------- Previous post was at 04:42 PM ----------

    تم الإنتهاء الأن من شرح الجزأ الخاص بسيرفر .. وسأعرض هنا الكود الخاص به بشكل كامل لكي تستطيع تطبيقه وهذا هو الكود:
    using System;
    using System.Net;
    using System.Net.Sockets;
    using System.Text; // سوف استخدم هذه المكتبة لتحويل الأسكي الى باينري و بالعكس
    class SimpleUdpSrvr
    {
    public static void Main()
    {
    int recv;
    byte[] data = new byte[1024];
    IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9050);
    Socket newsock = new Socket(AddressFamily.InterNetwork,
    SocketType.Dgram, ProtocolType.Udp);
    newsock.Bind(ipep);
    Console.WriteLine("Waiting for a client...");
    IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
    EndPoint Remote = (EndPoint)(sender);
    recv = newsock.ReceiveFrom(data, ref Remote);
    Console.WriteLine("Message received from {0}:", Remote.ToString());
    Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));
    string welcome = " Welcome Customer ...";
    data = Encoding.ASCII.GetBytes(welcome);
    newsock.SendTo(data, data.Length, SocketFlags.None, Remote);
    while(true)
    {
    data = new byte[1024];
    recv = newsock.ReceiveFrom(data, ref Remote);

    Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));
    newsock.SendTo(data, recv, SocketFlags.None, Remote);
    }
    }
    }



    الأن الجزء الخاص بال Client , يقتصر العمل هنا على قيام ال Client بفتح جلسة مع السيرفر وذلك بعد تعريفه بنقطة الإستلام ورقم البورت وكما تم في السابق اللا ان الإختلاف هو في الوظيفة اذا يقتصر فقط على استقبال الرسالة من السيرفر وارسال اي رساله له عبر البورت المخصص للقيام بهذه العملية انظر الكود التالي :


    using System;
    using System.Net;
    using System.Net.Sockets;
    using System.Text; // سوف استخدم هذه المكتبة لتحويل الأسكي الى باينري و بالعكس
    class SimpleUdpSrvr
    {
    public static void Main()
    {
    int recv;
    byte[] data = new byte[1024];
    IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9050);
    Socket newsock = new Socket(AddressFamily.InterNetwork,
    SocketType.Dgram, ProtocolType.Udp);
    newsock.Bind(ipep);
    Console.WriteLine("Waiting for a client...");
    IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
    EndPoint Remote = (EndPoint)(sender);
    recv = newsock.ReceiveFrom(data, ref Remote);
    Console.WriteLine("Message received from {0}:", Remote.ToString());
    Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));
    string welcome = " Welcome Customer ...";
    data = Encoding.ASCII.GetBytes(welcome);
    newsock.SendTo(data, data.Length, SocketFlags.None, Remote);
    while(true)
    {
    data = new byte[1024];
    recv = newsock.ReceiveFrom(data, ref Remote);

    Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));
    newsock.SendTo(data, recv, SocketFlags.None, Remote);
    }
    }
    }

    Though trading on financial markets involves high risk, it can still generate extra income in case you apply the right approach. By choosing a reliable broker such as InstaForex you get access to the international financial markets and open your way towards financial independence. You can sign up here.


  10. #30 Collapse post
    zied toumi is offline
    Banned Array
    Join Date
    Oct 2013
    Posts
    78
    Accrued Payments
    6 USD
    Thanks
    0
    Thanked 1 Time in 1 Post
    الأن الجزء الخاص بال Client , يقتصر العمل هنا على قيام ال Client بفتح جلسة مع السيرفر وذلك بعد تعريفه بنقطة الإستلام ورقم البورت وكما تم في السابق اللا ان الإختلاف هو في الوظيفة اذا يقتصر فقط على استقبال الرسالة من السيرفر وارسال اي رساله له عبر البورت المخصص للقيام بهذه العملية انظر الكود التالي :


    using System;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;
    class SimpleUdpClient
    {
    public static void Main()
    {
    byte[] data = new byte[1024];

    string input, stringData;
    IPEndPoint ipep = new IPEndPoint(
    IPAddress.Parse("127.0.0.1"), 9050);
    Socket server = new Socket(AddressFamily.InterNetwork,
    SocketType.Dgram, ProtocolType.Udp);
    // في حالة فقدان الإتصال مع السيرفر يظهر الرسالة التاية
    string welcome = "Hello, are you there?";
    data = Encoding.ASCII.GetBytes(welcome);
    server.SendTo(data, data.Length, SocketFlags.None, ipep);
    IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
    EndPoint Remote = (EndPoint)sender;

    data = new byte[1024];
    int recv = server.ReceiveFrom(data, ref Remote);
    Console.WriteLine("Message received from {0}:", Remote.ToString());
    Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));

    //هذا اللوب لكي تستطيع ارسال عدد غير محدد من الرسائل
    while(true)
    {
    input = Console.ReadLine();
    // في حالة اذا اردت انهاء الجلسة اكتب
    // Exit
    if (input == "exit")
    break;
    server.SendTo(Encoding.ASCII.GetBytes(input), Remote);
    data = new byte[1024];
    recv = server.ReceiveFrom(data, ref Remote);
    stringData = Encoding.ASCII.GetString(data, 0, recv);
    Console.WriteLine(stringData);
    }
    Console.WriteLine("Stopping client");
    server.Close();
    }
    }

    ---------- Post added at 04:46 PM ---------- Previous post was at 04:43 PM ----------

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

    الدرس: IP Multicasting واستخدامها لعمل Multicasting Group

    تحدثنا سابقا عن برتوكول ال UDP وشرحنا كيفية استخدامه لعمل برود كاست حيث تستطيع عمل البرود كاست بطريقتين إما باستخدام IPAddress.Any والذي يلزمه وجود سيرفر يقوم بعملية التصنت على البورت المحدد حيث يستقبل من خلاله أي رسالة ثم يقوم ببثها إلى كل الأجهزة أو باستخدام IPAddress.Broadcast والذي من خلاله يمكن عمل بث إلى كل الأجهزة حيث لا ضرورة لوجود جهاز سيرفر بحيث أن الكل يمكنه التصنت على بورت معين يستقبل ويرسل من خلالها أي رسالة إلى كل الأجهزة وتشبه عملية البرودكاست عملية البث الإذاعي حيث أن الجميع يستمع إلى شخص واحد ولكن يختلف بأن أي شخص يستطيع الإرسال و الاستقبال وفي نفس الوقت ... , وفي هذا الدرس سوف نتحدث عن ال IP Multicasting وذلك بهدف استخدامه لعمل ال Multicasting , يعتبر هذا الموضوع من المواضيع المهمة جدا في برمجيات الشبكات ولهذا خصصت له درس منفصل عن البقية إذ أن اغلب برمجيات ال Conferences تعتمد عليه بشكل كبير ويعرف Multicast على انه الإرسال إلى مجموعة من المستخدمين ( اثنان أو أكثر ) سواء كان Managed باستخدام Client/Server حيث يكون هنالك جهاز Server في الشبكة وظيفته استقبال الرسائل من ال Group Clients ثم إرسالها إلى كامل المجموعة مرة أخرى انظر إلى الشكل التالي :

    صورة

    لاحظ انه يتم إرسال طلب الانضمام إلى المجموعة من قبل ال Clients وإذا وافق السيرفر على الطلب يقوم بضم عنوان الجهاز إلى ال IP Address List Members الخاصة به حيث يعيد توزيع الرسائل المستقبلة إلى كل الأعضاء الموافق عليهم و الموجودين في قائمة عناوين الأعضاء .

    النوع الثاني ويسمى بال unmanaged- peer-to-peer Technique حيث أن كل جهاز يعمل ك server و client في نفس الوقت ولا وجود لجهاز سيرفر مركزي مخصص لعملية الاستقبال والتوزيع حيث تتم الموافقة على طلب الانضمام إلى المجموعة بشكل تلقائي وأي جهاز في المجموعة له الحق في الانضمام ثم الاستقبال و الإرسال إلى كامل المجموعة لاحظ الشكل التالي :
    صورة

    تم تخصيص عناوين خاصة لل Multicasting وهو ما يسمى بال IP Multicast Address وهي كما يلي :
    المدى من 224.0.0.0 إلى 224.0.0.255 لشبكات المحلية LAN
    المدى من 224.0.1.0 إلى 224.0.1.255 لل Internetwork
    المدى من 224.0.2.0 إلى 224.0.255.255 لل AD-HOC Network block
    كما يوجد تخصيصات أخرى له سوف آتي على ذكرها عند الحاجة ...


    قدمت الدوت نيت دعم كبير لل IP Multicast باستخدام ال Socket Namespace حيث يتم تعريفها باستخدام ال الميثود SetSocketOption والتي تقوم بإدارة عمليات الانضمام والخروج من والى المجموعة multicast group (join & leave ) كما تستخدم لإضافة وإلغاء العضوية AddMembership و DropMembership و تستخدم الميثود UdpClient Object لتحديد رقم البورت والتي سيتم استقبال البيانات من خلالها بالإضافة إلى تعريف ال IP Multicasting والذي من خلاله تحدد الجهات التي سوف تستقبل الرسالة من خلال تحديد ال Range IP الخاص بشبكات المحلية LAN حيث يستطيع أي شخص يتنصت على هذا البورت ويستخدم نفس ال Range استقبال هذه الرسالة , يستخدم الكود التالي لإرسال رسالة إلى عدة جهات بحيث نستخدم رقم البورت 9050 و ضمن ال Range 224.100.0.1 كمثال:

    ---------- Post added at 04:47 PM ---------- Previous post was at 04:46 PM ----------

    using System;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;

    class MultiSend
    {
    public static void Main()
    {
    Socket server = new Socket(AddressFamily.InterNetwork,
    SocketType.Dgram, ProtocolType.Udp);
    IPEndPoint iep = new IPEndPoint(IPAddress.Parse("224.100.0.1"), 9050);

    byte[] data = Encoding.ASCII.GetBytes("This is a test message");
    server.SendTo(data, iep);
    server.Close();
    }
    }

    في البداية قمنا بتعريف السوكت بتحديد الجهة التي سوف تستقبل الرسالة وهي (أي شخص يتنصت على الشبكة) ثم تحديد نوع السوكت والبرتوكول المستخدم , وبعد ذلك تحديد نقطة الهدف وذلك بوضع ال IP Multicast الذي نريد ويتبعه رقم البورت التي سيتم استقبال البيانات من خلالها ( بقية الكود تم شرحه سابقا عندما استخدمنا ال UDP لعمل برود كاست) ..


    ولإنشاء برنامج الاستقبال سوف نستخدم تعريف السوكت نفسه ونضيف ال UdpClient Object ونسند له رقم البورت التي نريد التصنت عليها

    using System;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;
    class UdpClientMultiRecv
    {
    public static void Main()
    {
    UdpClient sock = new UdpClient(9050); // التصنت على رقم البورت هذا

    sock.JoinMulticastGroup(IPAddress.Parse("224.100.0 .1"), 50);
    وهذا يعني انك سوف تتصنت على المدى المحدد

    IPEndPoint iep = new IPEndPoint(IPAddress.Any, 0);

    // استقبال البيانات وتعبئة الرسالة في مصفوفة من النوع بايت
    byte[] data = sock.Receive(ref iep);

    // التحويل إلى اسكي كود ثم طباعة الرسالة على الشاشة
    string stringData = Encoding.ASCII.GetString(data, 0, data.Length);
    Console.WriteLine("received: {0} from: {1}", stringData, iep.ToString());
    sock.Close();
    }
    }

    لاحظ انه توجد طرق متعددة لاستقبال البيانات و إرسالها كما يمكن استخدام الكوديين السابقين في نفس البرنامج للإرسال و الاستقبال كما يمكنك إرسال صورة إلى جانب النص ( انظر الدرس الثاني) أو أي شيء أخر يمكن تحويله إلى Binary إذ ما عليك سوى إضافة ال memory Stream وال Binary Reader وال Binary Writer إلى كود الإرسال و الاستقبال كما يمكنك عمل برنامج لإرسال صورة عبر الكاميرا إلى جهات متعددة باستخدام نفس الخاصية والتي سآتي على شرحها في الدروس اللاحقة إن شاء الله ...
    في هذا الدرس قمنا بتوضيح الأساسيات في ال IP Multicasting ولزيادة المعلومات انظر نتائج البحث التالية :
    http://www.google.co...ing Programming

    في الدرس القادم سوف نتحدث بإذن الله عن : DNS Programming ..

    لا تتردد أبدا في كتابة أي استفسار أو سؤال حول هذا الدرس أو الدروس السابقة أو أي موضوع آخر يتحدث عن برمجة الشبكات
    0

    ---------- Post added at 04:48 PM ---------- Previous post was at 04:47 PM ----------

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

    الدرس الخامس : DNS Programming
    تعتبر خدمة DNS واحدة من أهم الخدمات التي تستخدم في الإنترنت والشبكات بشكل عام, وتختصر وظيفة DNS بالقيام بعملية ترجمة ال Domain Name إلى Domain IP من وإلى العكس ويتم ذلك من خلال مجموعة كبيرة جدا من مزودات DNS ( والتي تقوم بتحديث قاعدة البيانات الخاصة بها كل فترة معينة) , تبدأ هذه العملية بقيام الA Client بطلب ال Domain الخاص بال Client B وذلك بإدخال Domain Name الخاص به - حيث تم مسبقا قيام ال Client B بتعريف نفسه في قاعدة البيانات الخاصة ب DNS Server - كما يحتوي كل Client على قاعدة بيانات تحتوي على عناوين ال Domains وتسمى بال local DNS حيث يقوم بالبحث بداخلها على عنوان Domain من خلال Domain Name فإذا لم يجده يقوم بطلب عنوان الدومين من ال DNS Server وبعد إيجاده يقوم ال DNS Server بإرسال العنوان إلى ال Client ويقوم بدوره بتخزين العنوان في Local DNS الخاص به , انظر إلى الشكل التالي:
    صورة
    في الدوت نيت يمكننا التعامل مع DNS باستخدام النيم سبيس System.Net والتي تحتوي على جميع ال Classes DNS والتي تحتوي على كل ال Methods الخاصة ب DNS وتقسم هذه الميثودس إلى قسمين متزامن Synchronous Methods و غير متزامن Asynchronous Methods وهي كما يلي:

    أولا الميثودس المتزامنة Synchronous Methods وهي :
    GetHostNameوالتي تستخدم لجلب اسم الهوست وترجع هذه الميثود قيمة String تحتوي على ال Computer Name ولا تأخذ هذه الميثود أي باراميترات ويمكن استخدامها كما يلي :

    Though trading on financial markets involves high risk, it can still generate extra income in case you apply the right approach. By choosing a reliable broker such as InstaForex you get access to the international financial markets and open your way towards financial independence. You can sign up here.


+ Reply to Thread
Page 3 of 9 1 2 3 4 5 ...

Subscribe to this Thread (1)

Open

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts

Threads

Posts

Members