منتديات نور الهدى

هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.

+4
sara magdy
Eng SmSma
key of life
cs_senior
8 مشترك

    شرح الابات

    cs_senior
    cs_senior
    مشرف منتدى السى شارب
    مشرف منتدى السى شارب


    ذكر
    عدد الرسائل : 408
    نقاط : 80
    تاريخ التسجيل : 28/04/2008

    شرح الابات Empty شرح الابات

    مُساهمة من طرف cs_senior الجمعة 8 مايو 2009 - 1:30

    السلام عليكم
    ديه المفروض اللاب 2 اللى البشمهندس حندوسه حطها فى منتدى الكليه
    ------------------------------------------
    لاب 2
    فكره الاب هيا process ,threading
    عارفين ان البروسيس هو البرنامج لما يتحط فى الميمورى
    بس لما نجى نميز البروسيس ديه بطريقه اكتر
    بنقول انها
    address space او المساحه اللى بيخدها البرنامج ده فى الميمورى
    وكمان الresource الخاصه بالبروسس ده
    ده كان فى الانظمه القديمه الى بتشغل بروسيس واحده وبس فى نفس الوقت
    دلوقتى بقى ممكن اكتر من بروسيس تشتغل وكلهم مشتركين فى نفس الresource
    وممكن البروسيس الواااااحده نفسها تتجزء اجزاء صغيره threading كل جزء يتنفذ بشكل منفصل عن التانى كانه بروسيس بالظبط
    زى فى الاوفيس الواحد بيكتب والبرنامج بيسيف فى نفس الوقت
    الكود:

    using System;
    using System.IO;
    using System.Diagnostics;
    namespace Lab2A
    {
    class Program
    {
    static void Main(string[] args)
    {
    if (args.Length != 2)
    {
    Console.WriteLine("Command format is: Lab2A filename");
    return;
    }

    string fileName = args[1];
    StreamReader sr = null;
    try
    {
    sr = new StreamReader(fileName);

    while (!sr.EndOfStream)
    {
    string command = sr.ReadLine();
    ProcessStartInfo info = new ProcessStartInfo();
    info.FileName = "cmd";
    info.Arguments = "/C " + command;
    info.WindowStyle = ProcessWindowStyle.Hidden;
    Process p = new Process();
    p.StartInfo = info;
    p.Start();
    }
    }
    catch (Exception ex)
    {
    Console.WriteLine("Error: " + ex.Message);
    }
    finally
    {
    if (sr != null) sr.Close();
    }
    }
    }
    }

    المطلوب فى الاب
    1- يقرى البارميتر اللى هتجيله من شاشه الكنسول
    2-يفتح ملف فيه اوامر
    3-يقرى كل امر وينفذه


    اجزاء الكود

    الكود:
     if (args.Length != 2)
    {
    Console.WriteLine("Command format is: Lab2A filename");
    return;
    }
    الكود ده هيقرى البارميتر
    " و عملتو رن مش هيقبل حاجه عشان الكود ده يشتغل بالشكل ده لازم يتعمله كومبيل بالدوس بامر csc"
    الكود:
     sr = new StreamReader(fileName);

    while (!sr.EndOfStream)
    {
    string command = sr.ReadLine();
    ProcessStartInfo info = new ProcessStartInfo();
    info.FileName = "cmd";
    info.Arguments = "/C " + command;
    info.WindowStyle = ProcessWindowStyle.Hidden;
    الstreamReader هيقرى سطر سطر من الملف
    يعمل معلومات عن بروسيس جديده الى هو الدوس فى السطر ده
    info.FileName = "cmd";
    ممكن البروسيس تكون اى حاجه تانيه مثلا النوت باد
    info.FileName = "notepad.exe";
    وبعدين جه حدد ان الاوامر الى هتتنفذ فى الدوس هيا اللى قراه من الملف
    وبعدين جه شغل البروسيس

    الكود:

    Process p = new Process();
    p.StartInfo = info;
    p.Start();
    -------------------------------------------------
    الجزء التانى من اللاب
    عاوز يقرى مجموعه اوامر عل بعض
    يخد كل امر ينفذه فى thread منفصل عن الباقى
    الكود:
    using System;
    using System.Threading;
    namespace Lab2B
    {
    class Program
    {
    static bool _runFlag = true;
    static void Main(string[] args)
    {
    if (args.Length != 3)
    {
    Console.WriteLine("Command format is: Lab2B threadsCount runTime");
    return;
    }
    int threadsCount = int.Parse(args[1]);
    int runTime = int.Parse(args[2]);
    DateTime stopTime = DateTime.Now.AddSeconds(runTime);
    for (int i = 0; i < threadsCount; i++)
    {
    // create a new thread to execute simulated work
    Thread t = new Thread(
    new ParameterizedThreadStart(ThreadWork));
    t.Start(i);
    Thread.Sleep(100); // let the newly created thread run
    }
    // cycle whilechildren work
    while (_runFlag)
    {
    DateTime now = DateTime.Now;
    if (now > stopTime) _runFlag = false;
    Thread.Sleep(1000);
    }
    }
    static void ThreadWork(object threadNumber)
    {
    // local variables
    double y;
    const double x = 3.14159;
    const double e = 2.17183;
    const int napTime = 1000; // in milliseconds
    const int busyTime = 40000;
    // create load
    while (_runFlag)
    {
    // CPU burst phase
    for (int i = 0; i < busyTime; i++) y = Math.Pow(x, e);
    // sleep phase
    Thread.Sleep(napTime);

    Console.WriteLine("Thread " + threadNumber.ToString());
    }
    }
    }
    }
    الكود ده بيشتقبل عدد الthread ومده تشغيل كل واحده
    بيحسب الوقت اللى المفروض الثريد تقف فيه بانه يجيب الوقت الحالى ويجمع مده التشغيل
    الكود:
     int runTime = int.Parse(args[2]);
    DateTime stopTime = DateTime.Now.AddSeconds(runTime);
    وبعدين يعمل لووب بعدد الثريد اللى اللى اليوزر دخلهم
    الثريد المفروض بتخد باميتر من نوعه
    "الديلجت نوع من انواع design pattren بعمل فيه جزء بيهتم بالاينفت الى ممكن تحصل زى كلك عل الماوس بدل ما اخلى الكلاس الرئيسه تهتم هيا بالاينفت وتسيب بقيت الشغل" delegate متعرف جاهز فى السى شارب
    اسمه threadstart لما تكون الميثود اللى هنده عليها مش بتخد اى باميتر
    بس هنا هو عاوز ينده عل الميثود
    static void ThreadWork(object threadNumber)
    بس ديه بتخد باميترا
    فاستخدم ديجلت ParameterizedThreadStart
    الديجلت بقى بيخد اسم الميثود كابراميتر له "الاسم وبس مش محتاج اقواس"
    وبعدين يبدا يشغل كل ثريد
    t.Start(i);
    هنا بقى المفرونروح الثريد ولا نكمل السطر اللى تحت
    مش نتعب نفسنا عشان فى برامج الmultithreading
    ترتيب تنفيذ الكود بيبقى حسب البروسيسور يعنى نفس البرنامج هجيب نتيجه مختلفه عل اكتر من جهاز وحتى عل نفس الجهاز
    لو روحنا ننفذ الثريد فالمفروض هيروح المثيود ويحسب وقتين
    وقت يخلى فيه الثريد شغاله
    ووقت يوقف الثريد ديه ويخلى الباقى يشتغلو
    الكود:
     const int napTime = 1000; // in milliseconds
    const int busyTime = 40000;
    // create load
    while (_runFlag)
    {
    // CPU burst phase
    for (int i = 0; i < busyTime; i++) y = Math.Pow(x, e);
    // sleep phase
    Thread.Sleep(napTime);

    Console.WriteLine("Thread " + threadNumber.ToString());
    }
    }

    بسسسسسسسسسسسسسسس كده


    عدل سابقا من قبل cs_senior في الجمعة 8 مايو 2009 - 17:08 عدل 1 مرات
    key of life
    key of life
    CS Supporter
    CS Supporter


    انثى
    عدد الرسائل : 592
    العمر : 35
    نقاط : 355
    تاريخ التسجيل : 13/05/2008

    شرح الابات Empty رد: شرح الابات

    مُساهمة من طرف key of life الجمعة 8 مايو 2009 - 1:45

    أحتمال أكون فهمت Smile
    فين الباقي Razz قصدي شكررررررا
    سلام
    Eng SmSma
    Eng SmSma
    عضو ماسّى
    عضو ماسّى


    انثى
    عدد الرسائل : 1010
    العمر : 34
    Location : مكان يسكنة قلبى
    نقاط : 164
    تاريخ التسجيل : 30/10/2007

    شرح الابات Empty رد: شرح الابات

    مُساهمة من طرف Eng SmSma الجمعة 8 مايو 2009 - 2:30

    شكرا يا بشمهندس
    جزاك الله كل خير
    sara magdy
    sara magdy
    CS Supporter
    CS Supporter


    عدد الرسائل : 696
    Location : with my love
    Favorites : web development/Math
    نقاط : 319
    تاريخ التسجيل : 30/03/2008

    شرح الابات Empty رد: شرح الابات

    مُساهمة من طرف sara magdy الجمعة 8 مايو 2009 - 11:25

    شكرااااااا جدااااااا
    my fate
    my fate
    CS Supporter
    CS Supporter


    انثى
    عدد الرسائل : 1926
    العمر : 35
    Location : Lost
    نقاط : 1161
    تاريخ التسجيل : 14/01/2008

    شرح الابات Empty رد: شرح الابات

    مُساهمة من طرف my fate الجمعة 8 مايو 2009 - 11:43

    شكرااا
    وربنا يسترهااااااا cheers
    BooDy
    BooDy
    ( النائب العام )
    ( النائب العام )


    ذكر
    عدد الرسائل : 2781
    العمر : 34
    نسبة احترام قوانين المنتدى : شرح الابات E7tram11
    نقاط : 690
    تاريخ التسجيل : 16/06/2007

    شرح الابات Empty رد: شرح الابات

    مُساهمة من طرف BooDy الجمعة 8 مايو 2009 - 14:50

    thnx Diaa Smile

    i think i understand the code now Smile
    wild flower
    wild flower
    عضو ماسّى
    عضو ماسّى


    انثى
    عدد الرسائل : 933
    العمر : 36
    نقاط : 271
    تاريخ التسجيل : 15/10/2007

    شرح الابات Empty رد: شرح الابات

    مُساهمة من طرف wild flower الجمعة 8 مايو 2009 - 15:25

    Eng SmSma كتب:
    شكرا يا بشمهندس
    جزاك الله كل خير
    cs_senior
    cs_senior
    مشرف منتدى السى شارب
    مشرف منتدى السى شارب


    ذكر
    عدد الرسائل : 408
    نقاط : 80
    تاريخ التسجيل : 28/04/2008

    شرح الابات Empty رد: شرح الابات

    مُساهمة من طرف cs_senior الجمعة 8 مايو 2009 - 15:59


    لاب 3
    --------------
    فكره الاب
    اننا فى الاب 2 عملنا ثريد منفصله
    طيب جميييييل
    فين المشكله بقى؟؟؟؟؟؟؟؟
    المشكله لما اعمل ثريد مثلا عشان تقرى ملف حجمه كبير جدا وهيخد وقت
    الملف اتقرى وكله تمام
    طب فين الداتا
    فين الكلام اللى اتقرى من الملف
    هتلاقوه اتبخر
    عشان انا معرفش هو مين راح فين عل فين
    الحل انى بستخدم signals
    لما حاجه معينه تحصل بقيت البرنامج يعرف
    يعنى الملف قراتيه خلصت البرنامج الرئيسى يعرف ويستقبل الدتا ديه
    حجاه كمان ممكن اعوذ ان الثريد تشتغل لو حاجه معنيه حصلت او توقف برضك لو حاجه معنيه حصلت
    وفيه كمان synchronous threading
    يعنى دلوقتى عندى اتنين ثريد بيشتغلو عل نفس المتغير قيمته مثلا 0
    اول ثريد بينده عل ميثود بتزود واحد
    وتانى ثريد بتنده عل ميثود تنقص واحد
    اللى هيحصل هيكون كده
    ثريد واحده تشتغل --> المتغير =1
    ثريد اتنين تشتغل -->المتغير قيمته 0
    بالطريقه ديه البرنامج هيجيب نتايج فوق الخيال
    الحل انى بعمل لوك عل المتغير
    طول ما الثريد شغاله ييفضل تبع االثريد لحد ما تخلص
    التعامل مع الثريد له مستوين"فى السى شارب"
    high level
    انى بستخدم كلاسات اللغه نففسسسسسسها
    زى( mointor-interlock-lock)
    low level
    ديه بقى كلاسات تبع الوندوز نفسسسسسسه
    يعنى لو جيبت اى لغه غير السى شارب هلاقى الكلاسات ديه
    ديه بقى اسمها kernel objects
    زى ( event, mutex, semaphore)
    دلوقتى الوبجكتس ديه موجوده اى حد ممكن يستخدمها بانه يعملها reference
    طب ازاى انا بقى افرق اوبجكت عن اوبجكت ومش الخبط بينهم
    ففيه حاجه اسمها handle
    الهاندل ده بيبقى رقم او اندكس لجدول بيتسف فيه كل الاوبجكات
    اى حاجه شغاله فى السيستم ليها هاندل عشان يفرقها عن غيرها
    ---------------------------------------------------------------------------------------------------------------
    الكود بيخد عدد البروسيسيس المطلوبه
    وبينفذ كل واحده
    بشرط ان كلهم يشتغلو لفتره معينه
    بعدها يوقف كل البروسيس ديه






    الكود:
    [font=Simplified Arabic Fixed]using System;
    using System.Threading;
    using System.Diagnostics;
    using System.Collections.Generic;

    namespace Lab3
    {
    class Program
    {

    static void Main(string[] args)
    {
    if (args.Length != 3)
    {
    Console.WriteLine(
    "Command format is: Lab3 runTime processesCount");
    return;
    }

    int runTime = int.Parse(args[1]);
    int processesCount = int.Parse(args[2]);

    List processes = new List();

    for (int i = 0; i < processesCount; i++)
    {
    Process p = new Process();
    processes.Add(p);
    p.StartInfo = new ProcessStartInfo("calc");
    p.Start();
    }

    int period = 0;
    AutoResetEvent autoResetEvent
    = new AutoResetEvent(false); // initially non-signaled

    // Create the delegate that invokes methods for the timer.
    TimerCallback timerCallback = new TimerCallback(FireEvent);

    // Create a timer that signals the delegate to invoke
    // KillProcesses after dueTime, and every period second thereafter.
    Timer timer = new Timer(
    timerCallback, autoResetEvent, runTime * 1000, period);

    // wait until autoResetEvent signals
    autoResetEvent.WaitOne(Timeout.Infinite, false);

    //destroy timer
    timer.Dispose();

    // timeout, kill all process
    foreach (Process p in processes)
    if (!p.HasExited) p.Kill();
    }

    static void FireEvent(object autoResetEvent)
    {
    ((AutoResetEvent)autoResetEvent).Set(); //Fire
    }
    }
    }[/font]
    الكود:


    [font=Simplified Arabic Fixed] if (args.Length != 3)
    {
    Console.WriteLine(
    "Command format is: Lab3 runTime processesCount");
    return;
    }

    int runTime = int.Parse(args[1]);
    int processesCount = int.Parse(args[2]);

    List processes = new List();

    for (int i = 0; i < processesCount; i++)
    {
    Process p = new Process();
    processes.Add(p);
    p.StartInfo = new ProcessStartInfo("calc");
    p.Start();
    }[/font]


    بيخد عدد البروسيسيس وفتره تشغليها
    ويبدا يشغلها
    الكود:
    [font=Simplified Arabic Fixed] AutoResetEvent autoResetEvent
    = new AutoResetEvent(false); // initially non-signaled[/font]
    ال autoResetEvent ده object kernel
    له اتنين state بس
    لما on ,off
    بيبقى مثلا فى حاله off
    لو حصل حاجه يقلب عل on
    وينده عل ميثود معينه ان فيه حاجه حصلصت وتبدا الميثود تشتغل
    الكود:
    [font=Simplified Arabic Fixed]// Create the delegate that invokes methods for the timer.
    TimerCallback timerCallback = new TimerCallback(FireEvent);[/font]
    Callback
    ممكن نفهمها من الجمله ديه
    when event occur callback some method
    وهنا بيستخدم الايفنت حسب الوقت
    يعنى لو الوقت خلص انده عل الميثودFireEvent
    اللى هيا هتخلى autoResetEvent on
    الكود:
    Timer timer = new Timer(
    timerCallback, autoResetEvent, runTime * 1000, period);


    ده التايمر اللى بيحسب فتره التشغيل
    الكود:
     // wait until autoResetEvent signals
    autoResetEvent.WaitOne(Timeout.Infinite, false);

    waitOne
    ديه ميثود بتعمل بلوك للبرنامج لحد ما autoResetEvent تبقى اون
    بتخد وقت عشان تعمل البلوك ده
    هنا حدد ان الوقت لانهائى يعنى يفضل مستنى علطلول
    الكود:
    [font=Simplified Arabic Fixed] //destroy timer
    timer.Dispose();

    // timeout, kill all process
    foreach (Process p in processes)
    if (!p.HasExited) p.Kill();[/font]
    بدام البلوك خلص عل البرنامج يبقى التايمر خلص شغله
    ويبدا بقى يوقف كل الثريد الى عملها
    الكود:
    [font=Simplified Arabic Fixed]static void FireEvent(object autoResetEvent)
    {
    ((AutoResetEvent)autoResetEvent).Set(); //Fire
    }[/font]
    ديه الميثود اللى بتتنادى لما التايمر يبقى صفر وبتعمل اون للايفنت
    cs_senior
    cs_senior
    مشرف منتدى السى شارب
    مشرف منتدى السى شارب


    ذكر
    عدد الرسائل : 408
    نقاط : 80
    تاريخ التسجيل : 28/04/2008

    شرح الابات Empty رد: شرح الابات

    مُساهمة من طرف cs_senior الجمعة 8 مايو 2009 - 16:38

    لاب 4 بيتكلم برضك عن
    synchronous
    ان بيبقى فيه ميثود بتدى نتايج producer تحطها فى مخزن
    تجى ميثو تانيه تخد الناتيج ديه consumer من المخزن
    بس بشرط ان الproducer مش يحط حجاه فى المخزن غير لما
    consumer يخد كل اللى فى المخزن ويبقى فاضى
    والعكس
    الconsumer مش يخد حاجه
    غير لما الproducer يملى المخزن ده

    كل ده باستخدام semphore
    اللى هيا kernel object
    فايدتها ان بحدد عدد الثريد فى thread pool لعدد معين مش يزيد عنه
    دلوقتى الثريد ديه اوبجكت بيحتاج وقت عشان يتخلق ويتحط فى الميمورى
    وكمان لما يتعمله parbage collection
    بيخد وقت عشان يتشال من الميمورى
    فعملو حاجه اسمها pool
    محطوط فيها عدد محدود من الثريد الجاهزه للاستخدام بس مش اكتف
    لما اعوز ثريد بخد من الthread pool
    ال semphore
    بتحدد عدد معين للثريدس اللى ممكن استخدمها
    الكود:
    [font=Simplified Arabic Fixed]using System;
    using System.Threading;

    namespace Lab4
    {
    class Program
    {
    static int bufferSize;
    static Semaphore full;
    static Semaphore empty;
    static Semaphore mutex;
    static widget[] widgets;

    static int inIndex;
    static int outIndex;

    static void Main(string[] args)
    {
    bufferSize = 25;
    widgets = new widget[bufferSize];

    inIndex = 0;
    outIndex = 0;

    mutex = new Semaphore(1, 1);
    full = new Semaphore(0, bufferSize);
    empty = new Semaphore(bufferSize, bufferSize);

    Thread producerThread
    = new Thread(new ThreadStart(Producer));
    Thread ConsumerThread
    = new Thread(new ThreadStart(Consumer));
    producerThread.Start();
    ConsumerThread.Start();
    }

    static void Producer()
    {
    while (true)
    {
    widget widget = GetNewWidget();

    // Claim an empty buffer
    empty.WaitOne();

    // Manipulate the pool
    mutex.WaitOne();
    widgets[inIndex] = widget;
    inIndex = (inIndex + 1) % bufferSize;
    mutex.Release();

    // Signal a full buffer
    full.Release();
    }
    }

    static void Consumer()
    {
    while (true)
    {
    //Claim a full buffer
    full.WaitOne();

    // Manipulate the pool
    mutex.WaitOne();
    widget widget = widgets[outIndex];
    outIndex = (outIndex + 1) % bufferSize;
    mutex.Release();

    // signal an empty buffer
    empty.Release();
    }
    }

    static widget GetNewWidget()
    {
    return new widget();
    }
    }

    class widget
    {
    // widget details
    }
    }[/font]

    الكود:

    [font=Simplified Arabic Fixed]static Semaphore full;
    static Semaphore empty;
    static Semaphore mutex;[/font]

    عمل تلاته سيمفور
    واحده كل المخازن الى فيها مليانه
    عددها
    full = new Semaphore(0, bufferSize);

    والتانيه فيها مخزن واحد فاضى
    empty = new Semaphore(bufferSize, bufferSize);
    والتالته اللى بتعمل synchronous
    الكود:
     static void Producer()
    {
    while (true)
    {
    widget widget = GetNewWidget();

    // Claim an empty buffer
    empty.WaitOne();

    // Manipulate the pool
    mutex.WaitOne();
    widgets[inIndex] = widget;
    inIndex = (inIndex + 1) % bufferSize;
    mutex.Release();

    // Signal a full buffer
    full.Release();
    }
    }


    هنا بيبقى بيعمل بلوك لحد ما يبقى empty فاضى
    ويعمل شويه شغل عل الكلاس
    وبعدين يعمل signal ان full بقى متاح
    والعكس فى الميثود التانيه
    الكود:

    static void Consumer()
    {
    while (true)
    {
    //Claim a full buffer
    full.WaitOne();

    // Manipulate the pool
    mutex.WaitOne();
    widget widget = widgets[outIndex];
    outIndex = (outIndex + 1) % bufferSize;
    mutex.Release();

    // signal an empty buffer
    empty.Release();
    }

    يعمل بلوك لحد الfull يبقى متاح
    يخلص شغله ويعمل signal ان ال empty بقى متاح
    cs_senior
    cs_senior
    مشرف منتدى السى شارب
    مشرف منتدى السى شارب


    ذكر
    عدد الرسائل : 408
    نقاط : 80
    تاريخ التسجيل : 28/04/2008

    شرح الابات Empty رد: شرح الابات

    مُساهمة من طرف cs_senior الجمعة 8 مايو 2009 - 17:01

    لاب 6
    بيتكلم عن اعمل اتصال بين اتنين بروسيس
    واستخدم الاى بيهات كطريقه الاتصال
    "برنامج شات من الاخر"
    فيه اتنين بروسيس
    ال server ده اللى بيستقبل من
    من client
    الاتصال بالاى بى
    بيتعمل بالsocket
    بس فى السى شارب فيه كلاسات خفيفه اسمها helper classes
    منها
    tcpClient
    كل شغله الكلاس ده ان بيعمل connect بالسيرفر
    Tcplistner
    وده كل شغلته بيعمل listen لبورت معين
    لو جه طلب كونشكن بيعمله accept

    وادى السرفر
    الكود:
    [font=Simplified Arabic Fixed]using System;
    using System.IO;
    using System.Net;
    using System.Threading;
    using System.Net.Sockets;

    namespace Server
    {
        class Program
        {
            static Thread _thread;
            static Socket _socket;
            static TcpListener _tcpListener;
            static BinaryReader _binaryReader;
            static BinaryWriter _binaryWriter;
            static NetworkStream _networkStream;

            static void Main(string[] args)
            {
                _thread = new Thread(new ThreadStart(RunServer));
                _thread.Start();
                Thread.Sleep(100);

                string msg;
                ConsoleKeyInfo keyInfo;

                do
                {
                    msg = string.Empty;

                    while(true)
                    {
                        keyInfo = Console.ReadKey(true);
                        if (keyInfo.Key == ConsoleKey.Enter) break;
                        msg += keyInfo.Key.ToString().ToLower();
                    }

                    try
                    {
                        Console.WriteLine("<" + msg);
                        _binaryWriter.Write(">" + msg);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Error: " + ex.Message);
                    }
                } while (msg != "exit");

                _thread.Abort();
            }

            static void RunServer()
            {
                try
                {
                    byte[] ip = { 127, 0, 0, 1 };
                    _tcpListener
                        = new TcpListener(new IPAddress(ip), 7000);
                    _tcpListener.Start();

                    while (true)
                    {
                        _socket = _tcpListener.AcceptSocket();
                        _networkStream = new NetworkStream(_socket);
                        _binaryReader = new BinaryReader(_networkStream);
                        _binaryWriter = new BinaryWriter(_networkStream);
                        _binaryWriter.Write("> Server started.");

                        while (_socket.Connected)
                            Console.WriteLine(_binaryReader.ReadString());

                        _binaryReader.Close();
                        _binaryWriter.Close();
                        _socket.Close();
                        _tcpListener.Stop();
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Error: " + ex.Message);
                }
                finally
                {
                    if (_binaryWriter != null) _binaryWriter.Close();
                    if (_binaryReader != null) _binaryReader.Close();
                    if (_socket != null) _socket.Close();
                    if (_tcpListener != null) _tcpListener.Stop();
                }
            }
        }
    }[/font]

    وداى الكلينت
    الكود:
    [font=Simplified Arabic Fixed]using System;
    using System.IO;
    using System.Net;
    using System.Threading;
    using System.Net.Sockets;

    namespace Client
    {
        class Program
        {
            static Thread _thread;
            static TcpClient _tcpClient;
            static BinaryReader _binaryReader;
            static BinaryWriter _binaryWriter;
            static NetworkStream _networkStream;

            static void Main(string[] args)
            {
                _thread = new Thread(new ThreadStart(RunClient));
                _thread.Start();
                Thread.Sleep(100);

                string msg;
                ConsoleKeyInfo keyInfo;

                do
                {
                    msg = string.Empty;

                    while (true)
                    {
                        keyInfo = Console.ReadKey(true);
                        if (keyInfo.Key == ConsoleKey.Enter) break;
                        msg += keyInfo.Key.ToString().ToLower();
                    }

                    try
                    {
                        Console.WriteLine("<" + msg);
                        _binaryWriter.Write(">" + msg);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Error: " + ex.Message);
                    }
                } while (msg != "exit");

                _thread.Abort();
            }

            static void RunClient()
            {
                try
                {
                    byte[] ip = { 127, 0, 0, 1 };
                    _tcpClient = new TcpClient();
                    _tcpClient.Connect(new IPAddress(ip), 7000);
                    _networkStream = _tcpClient.GetStream();
                    _binaryReader = new BinaryReader(_networkStream);
                    _binaryWriter = new BinaryWriter(_networkStream);
                    while (true)
                        Console.WriteLine(_binaryReader.ReadString());
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Error: " + ex.Message);
                }
                finally
                {
                    if (_binaryWriter != null) _binaryWriter.Close();
                    if (_binaryReader != null) _binaryReader.Close();
                    if (_tcpClient != null) _tcpClient.Close();
                }
            }
        }
    }[/font]
    my fate
    my fate
    CS Supporter
    CS Supporter


    انثى
    عدد الرسائل : 1926
    العمر : 35
    Location : Lost
    نقاط : 1161
    تاريخ التسجيل : 14/01/2008

    شرح الابات Empty رد: شرح الابات

    مُساهمة من طرف my fate الجمعة 8 مايو 2009 - 18:16

    Smile
    بجد ربنا يكرمك cheers
    KatKat
    KatKat
    CS Supporter
    CS Supporter


    وسام المسابقة العلمية الأولى : وسام المركز الأول انثى
    عدد الرسائل : 3632
    العمر : 35
    Location : MaNsOuRa
    نقاط : 1619
    تاريخ التسجيل : 18/01/2008

    شرح الابات Empty رد: شرح الابات

    مُساهمة من طرف KatKat السبت 9 مايو 2009 - 7:03

    جزاك الله خيرا

      الوقت/التاريخ الآن هو الجمعة 15 نوفمبر 2024 - 4:42