eramax

دروس فى برمجة الشبكات بالسى شارب

25 ردود في هذا الموضوع

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

اثناء وقت فراغى ساحاول بقدر الامكان ان اشرح بعض المواضيع الخاصة بلغة السى شارب , وستكون المحتويات المبدئية:

1- كيفية عمل IO باستخدام السى شارب

2- ترميز الملفات Encoding

3- استخدام الـ StreamReader و StreamWriter فى التعامل مع اى Stream

4- الـ Memory Stream

5- استخدام ال BufferStream

6- استخدام ال GZIP فى فك و ضغط الملفات

7- مفهوم ال Serialization وكيفيه تطبيقه

8- مفهوم ال Threading و ال Delegation

9- التحكم فى ال Threads

10- كيفية تحويل الصورة الى string يمكن الاحتفاظ بها واسترجاعها

11- مفهوم ال Thread Pooling وكيفية تطبيقه

12- مقدمة عن استخدام ال WMI

الدرس الاول: كيفية عمل IO باستخدام السى شارب

اولا انظروا الى هذا البرنامج وسوف اقوم بالشرح عليه

انسخ الكود
  1.  
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Text;
  5. using System.IO;
  6. namespace net
  7. {
  8. class Program
  9. {
  10. static void Main(string[] args)
  11. {
  12. filestr();
  13. }
  14. static void filestr()
  15. {
  16. try
  17. {
  18. FileStream fs = new FileStream("c:era.txt", FileMode.OpenOrCreate,FileAccess.Write);
  19. fs.WriteByte( );
  20. fs.WriteByte( );
  21. fs.WriteByte( );
  22. for (int c =; c;c )
  23. {
  24. string mystr = "nHello EraMaX.Net";
  25. foreach (byte b in mystr)
  26. {
  27. fs.WriteByte(b);
  28. }
  29. }
  30. Console.WriteLine("All Done!");
  31. fs.Close();
  32. }
  33. catch (Exception ex) { Console.WriteLine(ex.ToString()); }
  34. }
  35. }}
  36.  
  37.  
  38.  

اولا شوفنا اننا لابد ان نضيف using System.IO لكى نتمكن من التعامل مع كلاسات ال IO

فى عمليات ال IO يفضل ان تكون بين try & catch حتى نلاتفى ال exception الذى ممكن ان يحدث فى اى ظرف من الظروف

ونستبدله ب message Box ظريفة للمستخدم

فتحنا جملة try وكتبنا داخلها الاتى

انسخ الكود
  1.  
  2. FileStream fs = new FileStream("c:era.txt", FileMode.OpenOrCreate,FileAccess.Write);
  3.  
  4.  
  5.  

بمعنى اننى عملت اوبجيت من نوع filesystream هذا الاوبجيكت اسمه fs ويشير الى ملف السمه era.txt عنوانه c:\era.txt

واذا لم يجد البرنامج سوف يخلقه لذلك استخدمت هذا ال attrubit اللى هو OpenOrCreate والعملية التى اريد عملها اختار انا اذا كانت قراءة او كتابه او حتى القراءة والكتابه معا

write -- read -- read/write Both

دلوقتى بقى لدى موشر الى مكان معين )فايل ( يمكن الكتابة به او القراءة منه

يمكننى استخدام هذا ال filestream فى الكتابة والقراءة كالاتى :-

انسخ الكود
  1.  
  2. fs.WriteByte(79);
  3. fs.WriteByte(79);
  4. fs.WriteByte(80);
  5.  
  6.  
  7.  

فانا استطيع ان اكتب بايت بايت على هذا الاستريم

طبعا رقم ال 79 هو رقم الاسكى الخاص بالحرف الذى اريد كتابته فى ال file

او يمكننى اذا كانت لدى جملة ان ارسلها باستخدام ال foreach لتقطيعها بايت بايت وارسال كل بايت

كما فى التالى :-

انسخ الكود
  1.  
  2. for (int c =; c;c )
  3. {
  4. string mystr = "nHello EraMaX.Net";
  5. foreach (byte b in mystr)
  6. {
  7. fs.WriteByte(b);
  8. }
  9. }
  10.  
  11.  
  12.  

طبعا يفضل بعد الانتهاء من استخدام اى استريم ان يقوم بغلقه

 fs.Close();

وطبعا ما تنساش ال catch الخاصة بال try اللى فتحناها من شوية :(

استكمالا للموضوع طريقة عمل read من ملف معين نعرف عنوانه

اليك هذا الكود :-

انسخ الكود
  1.  
  2. static void strread()
  3. {
  4. try
  5. {
  6. FileStream fs = new FileStream("c:era.txt", FileMode.OpenOrCreate,FileAccess.Read);
  7. byte x;
  8. x = (byte)fs.ReadByte();
  9. while (x!=255 )
  10. {
  11. Console.Write(Convert.ToChar(x));
  12. x = (byte)fs.ReadByte();
  13. }
  14. Console.WriteLine();
  15. }
  16. catch (Exception ex) { Console.WriteLine(ex.ToString()); }
  17. }
  18.  
  19.  
  20.  

طبعا استخدمنا دالة ReadByte الموجوده داخل الابوجيت الذى من نوع filestream لنقراء بايت بايت

الان نتلكم عن ال seeking وهى التجول داخل الملف والقراءة والكتابة فى مكان معين فى الملف

شاهدوا هذا الكود :-

انسخ الكود
  1.  
  2. static void strseek()
  3. {
  4. FileStream fs = new FileStream("c:era.txt", FileMode.OpenOrCreate,
  5. FileAccess.Read);
  6. fs.Seek( , SeekOrigin.Begin);
  7. int i=0;
  8. while(i++<10 )
  9. Console.Write(Convert.ToChar(fs.ReadByte()));
  10. Console.WriteLine();
  11. Console.WriteLine(fs.Length.ToString());
  12. }
  13.  
  14.  
  15.  

طبعا استخدمت دالة ال seek الموجوده داخل الابجيكت fs واعطيتها رقم 10 باننى اقول لها تحركى عشرة اماكن من اين بقى تتحرك هذا هو ال attrubit الثانى قولت لها SeekOrgin.Begin اين من نقطة الاصل

ويمكن اجعلها 10 اماكن من المكان الحالى الذى اقف فيه .current

او ممكن 10 اماكن للخلف من النهاية .End

الى اللقاء مع الدرس القادم باذن الله :(

تم تعديل بواسطه فادي عبدالقادر
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

سريعا ندخل فى الدرس الثانى :-

الدرس الثانى : ترميز الملفات Encoding

كل ملف تنشئ لابد ان يكون له ترميز معين

ولتوضيح معنى ترميز اقراء الاتى

االترمز هو كم بايت يحتاجها ال char لكى يتم حفظه داخله

فهناك العديد من الترميزات اشهرها الاتى :-

ترميز الاسكى ASCII Encoding : ويتم فيه حفظ ال char على 7 بت ولذك يعطيه الكمبيوتر واحد بايت لان البايت من الصعب تقسيمه

1 Byte = 8Bit

ترميز ال UTF-8 : وبه يمثل ال char داخل بايت كامل مما يجعل يمكن تمثيل عدد كبير من ال char اكثر عددا مما كان فى الاسكى

ترميز ال UTF-16 : نفس الفكرة 16 بت اى 2 بايت

ترميز ال UTF-32 : ايضا نفس الفكرة 32 بت اى 4 بايت طبعا عدد اكبر من ال char يمكن بهذا الترمز التمثيل وبهذا يمكن للعديد من الكلمات بلغات متععدة تكتب داخل وثيقة واحدة بشرط ان الترميز يكون يحتوى هذه اللغات طبعا الحجم حيكبر معاك جدا بالضبط اربع مرات عن الملف العادى الذى بالاسكى

وهكذا ,

اليك بعض الامثلة:

انسخ الكود
  1.  
  2. static void Enc()//---- By Encodding i can convert string to byte array --
  3. {
  4. Encoding e1= Encoding.ASCll;
  5. string str = "EraMaX.Net";
  6. byte[] byarr e1. etBytes(str);
  7. str = e1.GetString(byarr);
  8. Console.WriteLine(str);
  9. foreach (byte b in byarr)
  10. {
  11. Console.WriteLine((char)b);
  12. }
  13. }
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  

انسخ الكود
  1.  
  2. static void strWenc()
  3. {
  4. StreamWriter sw = new StreamWriter(@"c:eraUTF8.txt",false,
  5. Encoding.UTF8);
  6. sw.WriteLine("Hello World!");
  7. sw.WriteLine("hello ");
  8. sw.Close();
  9. StreamWriter swf = new StreamWriter(@"c:eraASCII.txt",false,
  10. Encoding.ASCII);
  11. swf.WriteLine("Hello World!");
  12. swf.WriteLine("hello ");
  13. swf.Close();
  14. StreamWriter swx = new StreamWriter(@"c:eraUTF32.txt,false,
  15. Encoding.UTF32 );
  16. swx .WriteLine("Hello World!");
  17. swx .WriteLine("hello ");
  18. swx .Close();
  19. Console.WriteLine(" ll Done!");
  20. }
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  

الى اللقاء فى الدرس القادم باذن الله :(

تم تعديل بواسطه eramax
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

عدنا:

الدرس الثالث: استخدام ال StreamReader و StreamWriter فى التعامل مع اى Stream

انظر الى الكود التالى :-

انسخ الكود
  1.  
  2. static void streamRW()
  3. {
  4. FileStream fx = new FileStream(@"c:eraRW.txt",FileMode.OpenOrCreate
  5. FileAccess.ReadWrite);
  6. StreamReader sr = new StreamReader(fx);
  7. StreamWriter sw new StreamWriter(fx);
  8. sw.BaseStream.Position =0;
  9. sw.WriteLine("Hello IO Stream");
  10. sr.BaseStream.Position=0;
  11. string re = sr.ReadToEnd();
  12. Console.WriteLine(re);
  13. sw.Close();
  14. sr.Close();
  15. fx.Close();
  16. }
  17.  
  18.  
  19.  

لقد انشائنا اوبجيكت من نوع StreamReader واسمه sr وكذلك اوبجيكت من نوع StreamWriter واسمه sw

من خصائص كلنا من StreamReader و StreamWriter انها تعمل فوق Stream موجود فلابد من وجود stream مع هذا الملف الذى تريد ان تكتب او تقراء منه

لذلك قمنا بعمل اوبجيكت من نوع FileStream اسمه fs يشير الى الملف eraRW.txt

لاحظ معى ان FileAccess.ReadWrite اى يمكنك القراءة والكتابة فى نفس الملف فى فى نفس ال Stream

حتى الان لم نتلكم عن مميزات ال StreamReader و StreamWriter

المميزات انها تجعل عملية القراءة اسهل بكثير مما كانت مع الا Stream الاصلى وهى مسخدمه بشكل واسع جدا لسهولتها كانك تكتب على شاشة الكونسول وتقراء منه

شاهد ذلك

انسخ الكود
  1.  
  2. sw.WriteLine("Hello IO Stream");
  3.  
  4.  
  5.  
  6.  

انسخ الكود
  1.  
  2. string re = sr.ReadToEnd();
  3.  
  4.  
  5.  
  6.  

وهناك الكثير من الدوال تجول فى الكلاس براحتك وجرب كل شئ

لا تنسى ان تغلق ال Stream اللى عملتها كلها تغلق الذى يعمل على Stream من تحته قبل ان تغلق الذى تحته )يفضل ذلك(

الى اللقاء فى الدرس القادم باذن الله :(

تم تعديل بواسطه eramax
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

عدنا ;

الدرس الرابع ال Memory Stream

كثيرا يحتاج برنامجنا ان يقوم بتخزين داتا معينه او يحاول ان يقوم بانشاء ملف مؤقت ثم يقوم بحذفه بعد انتهاء من استخدام ذلك الملف

لك هناك شئ اسمه ال Memory Stream اى انك تقراء وتكتب على مكان فى الميمورى

طبعا تمتاز بالسرعة العالية مقارنتا اذا كان الملف مخزن على الهارد

اليك الكود التالى ::-

انسخ الكود
  1. static void memRW()
  2. {
  3. MemoryStream mem = new MemoryStream(6000);
  4. ASCIIEncoding u =new ASCIIEncoding ();
  5. byte[] buff = u.GetBytes("EraMaXEraMaXEraMaX");
  6. Console.WriteLine(" Capacit " + mem.Capacity.ToString());
  7. mem.Write(buff,0,"Era aXEraMaXEraMaX".Lengh);
  8. mem.SeeK(0,SeeKOrigin.Begin);
  9. for(int i=0 ;i< "Era aXEra aXEra aX".Length;i++)
  10. Console.Write((char)mem.ReadByte());
  11. Console.WriteLine(" Capacit "+mem.Capacity.ToString());
  12. mem.Close();
  13. }
  14.  
  15.  
  16.  

طبعا كالسابق شرحه سوف ننشئ اوبجيكت من نوع Memory Stream

ملاحظة رقم ال 6000 هذه هى المساحة التى اريد حجزها فى الميمورى لكى اكتب عليها

لذلك تكون ال capacity تساوى 6000

لكى نكتب على فى الميمورى استريم استخدم الاتى :-

انسخ الكود
  1. mem.Write(buff,0,"Era aXEraMaXEraMaX".Lengh);
  2.  
  3.  
  4.  

تاخذ هذه الدالة write تاخذ byte array وتاخذ ال lenght الذى تريد كتابته من هذه ال array على هذا ال stream

وبنفس الطريقة ستجد القراءة

الى اللقاء مع الدرس القادم باذن الله :(

تم تعديل بواسطه eramax
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

عدنا :

الدرس الخامس : استخدام ال BufferStream

وهو يشبه لحد كبير جدا ال Memory Stream ولكن ذلك يقراء الداتا الخاصة من Stream اخر كملف

انظر الى الكود التالى :-

انسخ الكود
  1.  
  2. static void buffs()
  3. {
  4. string path="c:era.txt";
  5. Stream st=File.OpenRead(path);
  6. BufferedStream bf=new BufferedStream(st);
  7. FileInfo inf=new FileInfo(path);
  8. long size =inf.Length ;
  9. byte[] by= new byte[6000];
  10. bf.Read(by,0,6000);
  11. Console.WriteLine("The Data is : " + Encoding.ASCII.GetString(by));
  12. Console.WriteLine("All Done!");
  13. }
  14.  
  15.  

استخدمت اوبجيكت من نوع FileInfo واعطيته عنوان ملف لكى يحصل على بيانات عن هذا الملف مثل الحجم

الى اللقاء فى الدرس القادم باذن الله :(

تم تعديل بواسطه eramax
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

عدنا :

الدرس السادس : استخدام ال GZIP فى فك و ضغط الملفات

ال GZipStream هو stream يعمل فوق stream اخر

ياخذ كل شئ تضعه به ويرميه على ال stream الذى هو عليه وهو مضغوط

بدايتا لابد من ان تضيف هذا

انسخ الكود
  1. using System.IO.Compression;
  2.  

لذلك شاهد هذا الكود :-

انسخ الكود
  1.  
  2. static void zip()
  3. {
  4. FileStream fx = new FileStream(@"c:era.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);
  5. FileStream zx = new FileStream(@"c:era.zip", FileMode.OpenOrCreate, FileAccess.ReadWrite);
  6. StreamReader sr = new StreamReader(fx);
  7. string data = sr.ReadToEnd();
  8. GZipStream zipcom = new GZipStream(zx, CompressionMode.Compress);
  9. StreamWriter sw = new StreamWriter(zipcom);
  10. sw.Write(data);
  11. sr.Close();
  12. sw.Close();
  13. fx.Close();
  14. zx.Close();
  15. zipcom.Close();
  16. Console.WriteLine("File Compresed.");
  17. }
  18.  
  19.  
  20.  
  21.  

فانا فى البداية عملت fileStream يشير الى ملف era.txt وهذا الملف المفروض هو الذى يحتوى على الداتا والمطلوب ضغط هذا الملف بال GZip

لذلك نقوم بانشاء stream اخر على ملف سنقوم بانشاءه هذا هو الملف الذى هو ناتج الضغط

وسمينا هذا الstream ب zx واشار الى الملف era.zip او ممكن يكون الاسم era.gz

قمنا بعمل streamreader فوق الfilestream الذى على ملف era.txt حتى يمكننا من قراءه الملف

وخزنا كل الداتا التى فى الملف فى متغير من نوع string اسمه data

من خلال الامر

انسخ الكود
  1. string data = sr.ReadToEnd();
  2.  
  3.  
  4.  
  5.  

انشاءنا ال GZipStream الذى يعمل فوق filestream لكى يرمى عليه الداتا وهى مضغوطه

من خلال الامر :-

انسخ الكود
  1. GZipStream zipcom = new GZipStream(zx, CompressionMode.Compress);
  2.  
  3.  
  4.  
  5.  

شوف كدا CompressionMode.Compress

واذا كنا نريد ان ياخذ هذا ال GZipStream داتا ويوقم بفك الضغط نستخدم CompressionMode.Decompress

قمنا بعمل streamwriter يكتب على ال zipcom سوف نكتب عليه ال data التى هى الداتا الخاصة بالملف era.txt

بعد ذلك لا تنسى اغلاق جميع ال streams التى استخدمتها

وهذا كود لطريقة فك ضغط الملف باستخدام ال GZip :-

انسخ الكود
  1.  
  2. static void unzip()
  3. {
  4. try
  5. {
  6. FileStream fx = new FileStream(@"c:era.txt", FileMode.OpenOrCreate, FileAccess.
    ReadWrite);
  7. FileStream mx = new FileStream(@"c:era.zip", FileMode.Open, FileAccess.Read);
  8. GZipStream zipcom = new GZipStream(mx, CompressionMode.Decompress);
  9. StreamReader sr = new StreamReader(zipcom);
  10. string data = sr.ReadToEnd();
  11. //StreamWriter sw = new StreamWriter(zipcom);
  12. //sw.Write(data);
  13. sr.Close();
  14. // sw.Close();
  15. fx.Close();
  16. zipcom.Close();
  17. mx.Close();
  18. Console.WriteLine("File Extracted.");
  19. Console.WriteLine(data);
  20. }
  21. catch (Exception ex) { Console.WriteLine(ex.ToString()); }
  22. }
  23.  
  24.  
  25.  
  26.  

نفس الشرح بالضبط

الى اللقاء مع الدرس القادم باذن الله

اطيب المنى :)

تم تعديل بواسطه eramax
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

عدنا:

الدرس السابع : مفهوم ال Serialization وكيفيه تطبيقه

ال Serialization مفهومها هو تحويل ال object لمجموعة من ال bytes يمكن نقلها من الحفاظ على هذا ال object حتى يصل الى وجهته بدون حدوث الى تغير او اخطأ فى محتويات هذا ال object

وسميت Serialization من كلمة serial

كيف ذلك

شاهد معى هذا الكود :-

انسخ الكود
  1.  
  2. using System;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.IO;
  6. using System.Data;
  7. using System.Drawing;
  8. using System.Text;
  9. using System.Windows.Forms;
  10. using System.Runtime.Serialization;
  11. using System.Runtime.Serialization.Formatters;
  12. using System.Runtime.Serialization.Formatters.Binary;
  13. using System.Threading;
  14.  
  15.  
  16. namespace net2
  17. {
  18. public partial class Form1 : Form
  19. {
  20. Thread tx;
  21. public Form1()
  22. {
  23. InitializeComponent();
  24. }
  25.  
  26. private void button1_Click(object sender, EventArgs e)
  27. {
  28. //ser xs = new ser();
  29. serializeX();
  30. }
  31. static void serializeX()
  32. {
  33. FileStream fx = new FileStream(@"c:ser.data", FileMode.OpenOrCreate, FileAccess.ReadWrite);
  34. string data = "EraMaX.Net";
  35. BinaryFormatter bf = new BinaryFormatter();
  36. bf.Serialize(fx, data);
  37. fx.Close();
  38. }}
  39. }
  40.  

طبعا من الواضح لابد من تضمين الاتى :-

انسخ الكود
  1.  
  2. using System.Runtime.Serialization;
  3. using System.Runtime.Serialization.Formatters;
  4. using System.Runtime.Serialization.Formatters.Binary;
  5.  

فى هذا المثال انا كنت اريد حفظ object من نوع string فى ملف اسمه ser.data

طبعا فى البدابة عملت filestream على الملف ser.data

ولكى استخدم ال serialization لابد ان انشئ BinaryFormatter وياخذ هذا ال OBJECT

من خلال السطر

انسخ الكود
  1.  
  2. BinaryFormatter bf = new BinaryFormatter();
  3.  

بهذا الان انا استطيع ان اعمل serialize لهذا ال object على اى stream وال Object سيتحول الى مجموعة من ال bits على هذا الا stream

من خلال الامر التالى :-

انسخ الكود
  1. bf.Serialize(fx, data);
  2.  

حيث ان ال fx هو filestream و ال data هذا object من نوع string وحيث ان كل شئ فى ال C# هو object لذلك يمكن من خلال ذلك ان تنقل اى شئ اى control ولكن فكر معى هل ممكن ان تنقل socket لم اجربها لكنها مؤكد مستحيله لانها ليس معنى

فى النهاية لا تنسى اغلاق جميع ال streams المفتوحة

واليك الان كيفية عمل DeSerialize ل object وهو مثلا داخل ملف او تم استقباله من على socket

اليك هذا الكود :-

انسخ الكود
  1.  
  2. static void deserializeX()
  3. {
  4. FileStream fx = new FileStream(@"c:ser.data", FileMode.OpenOrCreate, FileAccess.ReadWrite);
  5. BinaryFormatter bf = new BinaryFormatter();
  6. object obj;
  7. obj = bf.Deserialize(fx);
  8. fx.Close();
  9. MessageBox.Show(obj.ToString());
  10. }
  11.  

طبعا لابد من وجود stream سيتم استقبال ال object منه

ونقوم بانشاء BinaryFormatter سيقوم باستقبال هذا ال object من هذا ال stream وسيرجعه لنا من خلال الامر

انسخ الكود
  1.  
  2. BinaryFormatter bf = new BinaryFormatter();
  3. object obj;
  4. obj = bf.Deserialize(fx);
  5.  

وفى حالتنا كان ال Object من نوع string لأذلك عهو نص فيمكن عرضه بالسطر الاتى :-

انسخ الكود
  1. MessageBox.Show(obj.ToString());
  2.  

او ممكن تستخدم الاداة AS كالتالى :-

انسخ الكود
  1. MessageBox.Show(obj as string);
  2.  

وبذلك نكون قد ارجعنا ال object كما كان

الى اللقاء مع الدرس القادم باذن الله :)

اطيب المنى :)

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

اخي العزيز eramax ,

نشكر لك هذه المبادرة الطيبة في كتابة دروس تتعلق بالـIO Streaming وسأقوم بتثبيت الموضوع لأهميتة

وتقبل اطيب التحية

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

عدنا :

الدرس الثامن : مفهوم ال Threading و ال Delegation

كل تطبيق تقوم بتشغيله يرتكز على process أو اكثر من process كل process تقوم باداء وظيفية معينه حتى يخرج لك البرنامج بالمظهر المطلوب والوظيفة المطلوبه منه

ولكن مفهوم ال Threading ليس تقسيم البرنامج على اكثر من Process انما تقسيم العمليات التى تتمها ال Process الواحدة بمعنى اذا كان لدى اكثر من دالة مثلا fun1 و fun2 وطلبت اعمل thread للدالة fun2 وانا متواجد فى الدالة fun1 فان الحاسب سوف يبدا فى تنفيذ بعض التعليمات التى فى الدالة fun1 ويتحول لتفيذ بعض العمليات التى فى الدالة fun2 ويتسمى ذلك ان الدالتين تعمل معا Concurrent

فان بذلك الوقت الذى تاخذه ال Process يقسم على عدد ال Threads الموجوده داخلها

وكل Procss لذلك تحتوى على الاقل Thread واحدة تسمى ال Main

ومبدأ ال Threading مبنى على انك تقوم بعمل LinkedList ل Pointers ل Statements ليست موجوده فى دالة واحدة

لا تنسى تضمين الاتى ؟:-

انسخ الكود
  1.  
  2. using System.Threading;
  3.  
  4.  

مفهوم ال Delegation معناه هو ان تقوم بعمل مؤشر يشير الى دالة حتى يمكن ان تنادى هذه الدالة من اى مكان

ولكى نقوم بتعريف ال Delegation شاهد هذا الكود :-

انسخ الكود
  1.  
  2. public delegate void updateListBox(string item);
  3. void updater(string Data)
  4. {
  5. listBox1.Items.Add(Data);
  6. }
  7.  
  8.  

بهذا لقد قمنا بتعريف delegate يشير الى اى دالة يمكن ان نعطيها له بشرط ان تكون هذه الدالة تاخذ متغير واحد من نوع string

ولكى نقوم باستخدام هذا ال Delegation فى مناداة الدلة التى يشير اليها شاهد معى هذا الكود :-

انسخ الكود
  1.  
  2. //-------- LISTBOX ADD item---- With Delegate ---
  3. updateListBox ux = new updateListBox(updater);
  4. this.Invoke(ux, Convert.ToString(d));
  5.  

تقوم بتعريف متغير من نوع ال Delegate الذى قمنا بتعريفه من قبل خارج الدالة

نقوم باعطائه اسم الدالة التى تاخذ متغير من نوع sting

نقوم بعد ذلك بعمل invoke لتلك الدالة بمعنى اننى انادى على هذه الدالة ان تنفذ قبل انتهاء تنفيذ الدالة التى انا متواجد بها الان

واعطيها اسم ال delegate والمتغيرات التى تاخذها بهذا الشكل التالى :-

انسخ الكود
  1. this.Invoke(ux, Convert.ToString(d));
  2.  

دالة ال updater هى دالة عادية تقوم بأخذ عنصر وتقوم باضافته على ال ListBox

ما سبب استخدامى ال Delegation :-

اولا لابد لك ان تفهم معى نقطة هامة وهى : ان اذا كان برنامجك له واجهه رسومية وكان من الطبيعى هناك Buttons يضغط عليها المستخدم ويقوم برنامجك فى هذه الحالة بتفيذ العديد من الاموار والتعليمات

فلابد ان يكون برنامج يعمل على اكثر من Thread اما اذا كان برنامجك يعمل على Thread واحد ففى هذه الحالة اذا ضغطت على اى Button لكى ينفذ لك مجموعة من التعليمات فان الواجهه لن تكون Active معك لا تستطيع ان تضغط على شئ ويظهؤ البرنامج كما لو كان hange" يهنج " لذلك فنحن نجعل الواجهه فى Thread لكى تكون active مع المستخدم دائما ولا نعرض برنامجنا للتهنيج

فاذا كانت دالة او مجموعة من الدوال تعمل فى Thread معينه وهى ال Thread فى هذه الحالة الخاصة برسم الواجهه الرسومية للمستخدم وانا لدى Thread أخرى اقوم بنفيذ بعض العمليات بها

لذلك لكى اقوم بتغير اى شئ قيمة متغير او اى شئ او العب فى خصائص اى Control او اى شئ فى ال Thread الخاصة برسم الواجهه الرسومية لذلك يلزمنى الاتى

ان اكون على علم مسبق بما سوف اريده اذا كنت فى ال Thread التى تنفذ عمليات من ال Thread التى ترسم الواجهه وفى مثالا ما اريده هو اضافة العدد الاولى الى ال ListBox

ثانيا اقوم بكتابه دالة يمكننها رؤية ال هذا ال ListBox وتكون تاخذ هذا ال Item الذى ستضعه فى ال ListBox وفى حالتنا كانت الدالة اسمها updater وتاخذ عنصر داخل متغير من نوع string واسمه data

وتقوم باضافته الى ال ListBox

لذلك اقوم بعمل Delegate يشير الى هذه الدالة لكى استطيع مناداة هذه الدالة وانا فى اى مكان حتى لو اننى داخل Thread اخرى ولكن لا يصلح اذا كنت داخل Process اخرى الا ببعض العمليات

شاهد معى هذا الكود :-

انسخ الكود
  1.  
  2. using System;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.IO;
  6. using System.Data;
  7. using System.Drawing;
  8. using System.Text;
  9. using System.Windows.Forms;
  10. using System.Threading;
  11.  
  12. namespace net2
  13. {
  14. public partial class Form1 : Form
  15. {
  16. Thread tx;
  17. public Form1()
  18. {
  19. InitializeComponent();
  20. }
  21. public delegate void updateListBox(string item);
  22. public void primeGen()
  23. {
  24. int d = 2,flage=0;
  25. while (true)
  26. {
  27. for (int a = 2; a < d; a++)
  28. {
  29. if (d % a == 0) flage = 1;
  30. }
  31. if (flage == 0)
  32. {
  33. //-------- LISTBOX ADD item---- With Delegate ---
  34. updateListBox ux = new updateListBox(updater);
  35. this.Invoke(ux, Convert.ToString(d));
  36. }
  37. flage = 0;
  38. d++;
  39. }
  40. }
  41. void updater(string Data)
  42. {
  43. listBox1.Items.Add(Data);
  44. }
  45.  
  46. private void button5_Click(object sender, EventArgs e)
  47. {
  48. tx = new Thread(new ThreadStart(primeGen));
  49. tx.Start();
  50. cmdStart.Enabled = false;
  51. }
  52.  
  53.  

هذا الكود يقوم بحساب الاعداد الاولية واخراجها فى ListBox طبعا هذا برنامج Windows Application

لذلك قم بانشاء Form وضع بها زر Start وضع ايضا ListBox

الدالة التى اسمها primeGen هى التى تستعمل فى الحصول على الاعداد الاوليه

شاهد معى الكود الخاص بها :-

انسخ الكود
  1.  
  2.  
  3. public void primeGen()
  4. {
  5. int d = 2,flage=0;
  6. while (true)
  7. {
  8. for (int a = 2; a < d; a++)
  9. {
  10. if (d % a == 0) flage = 1;
  11. }
  12. if (flage == 0)
  13. {
  14. //-------- LISTBOX ADD item---- With Delegate ---
  15. updateListBox ux = new updateListBox(updater);
  16. this.Invoke(ux, Convert.ToString(d));
  17. }
  18. flage = 0;
  19. d++;
  20. }
  21. }
  22.  
  23.  

لبدء تشغيل الدالة primeGen داخل Thread شاهد هذا الكود :-

انسخ الكود
  1.  
  2. private void button5_Click(object sender, EventArgs e)
  3. {
  4. tx = new Thread(new ThreadStart(primeGen));
  5. tx.Start();
  6. cmdStart.Enabled = false;
  7. }
  8.  
  9.  

حيث ان ال tx هو object من نوع Thread تم تعريفه من قبل خارج الدالة وليس شرطا تعرفه خارج الدالة

الا لو كنت تريد اكثر من دالة يمكننها ان ترى هذا ال Thread والتحكم فى مجراه مثل ان تقوم بايقافه او انهائه وهذا ما سنعرفه باذن الله فى الدرس القادم

طبعا ال Thread ياخذ اسم الدالة بدون وضع القوسين ..

الى اللقاء فى الدرس القادم باذن الله :)

اطيب المنى :)

تم تعديل بواسطه eramax
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

عدنا ;

الدرس التاسع : التحكم فى ال Threads

يمكننا التحكم فى اى Thread اذا كانت تحت مجال رؤيتنا ولكى تجعل ال Thread كل الدوال تراها اجعل تعريفها خارج نطاق الدوال

ما هى ادوات التحكم التى تسطيع تطبقها على اى Thread :-

1- Start تخبر هذه ال Thread ان تبدأ فى العمل

من خلال الامر التالى :-

انسخ الكود
  1.  
  2.  
  3. tx = new Thread(new ThreadStart(primeGen));
  4. tx.Start();
  5.  
  6.  

2- Abort لل Thread وهذا معناه انك تقوم بانهائها من قبل ان تكون قد انهت كل التعليمات التى تشير اليها وهذا يعتبر من الخطأ فعله ولكنك احيانا تضطر الى ذلك على سبيل المثال يمكنك ان تضطر لها اذا كنت فاتح عدد كبير من ال Threads على نفس ال Process التى تعطى المستخدم برنامجك وفؤجئت ببطئ فى ال Preformance عندما تعمل كل العمليات فى وقت واحد فايتى لك الخيار اما ان تقوم بعمل Abort لبعض ال Threads التى ربما يكون فى غنى عنها او تقوم بعمل Sleep لها

لعمل Abort لابد ان تضع catch لل Exception الذى سيخرج لك وهو exception يخبرك بانه من الخطأ عمل Abort لاى Thread

لعمل Abort من خلال الكود التالى :-

انسخ الكود
  1.  
  2. tx.Abort();
  3.  
  4.  

3- Suspend اى توقف مؤقت لل Thread وهذا يكون مثل انك تقوم بعملية Sleep لل Thread ولكن بدون تحديد مدة زمينية لكى تنامها

يمكن عمل ال Suspend من خلال الكود التالى :-

انسخ الكود
  1.  
  2. tx.Suspend();
  3.  
  4.  

4- Resume يمكن ارجاع ال Thread من وضع ال Suspend لكى تعود وتكمل عملها

من خلال الكود التالى :-

انسخ الكود
  1.  
  2. tx.Resume();
  3.  
  4.  

5- Stop يمكن توقيف ال Thread عن العمل وانا لا ارى ان هناك فرق كبير بينها وبين عملية ال Abort ولكنها لا تعطى Exception

انسخ الكود
  1.  
  2. tx.Stop();
  3.  
  4.  

6-Sleep يمكن لل Thread ان تقوم بالذهاب الى وضع ال Sleep وهذا تقوم به هى نفسها وليس من خارج ال Thread وتقوم بالذهاب الى وضع ال Sleep وتقوم بضبط المنبه لكى تقوم من النوم بعد فترة زمنية معينه

لعمل ذلك اليك الكود :-

انسخ الكود
  1.  
  2. Thread.Sleep(1000);//----- Iam Going to Sleep
  3.  
  4.  

7-Interupt وهى اذا كانت ال Thread فى وضع ال Sleep يمكن لك وانت خارج هذه ال Thread ان تقوم بايقاظها واخارجها من وضع ال Sleep الى وضع ال Excecute

عن طريق هذا الكود :-

انسخ الكود
  1.  
  2. th.Interrupt();
  3.  
  4.  

8- join يمكن ان تقوم بعمل Join ل Thread اخرى مع ال Thread التى انت بها وفى هذه الحالة سيقوم برنامجك بتنفيذ ال Thread التى قمت بعمل Join لها حتى تنتهى ثم يستكمل تنفيذ ال Thread التى انت بها

ولعمل ال Join اليك الكود : -

انسخ الكود
  1.  
  2. void Con251_500()
  3. {
  4. tx1.Join();
  5. for (int p = 251; p <= 500; p++) Console.WriteLine(p);
  6. }
  7.  
  8.  

9-Priority يمكن التحكم فى ال Priority الخاصة بال Thread من خلال ان يكون لها Priority اكبر فى التنفيذ وبذلك تقسيم وقت ال Process على ال Threads لن يكون عدلا ولن يكون متساوى على الجميع ولكن سيكون تبع ال Priority التى اعتيطها لل Threads التى داخل ال Process

لديك خمس مراحل من ال Priority وهى من الاعلى Priority الى الاقل :-

RealTime

Highest

Normal

Low

Idl

وللتحكم فى ال Priority الخاصة بال Thread شاهد معى الكود التالى :-

انسخ الكود
  1. th.Priority = System.Threading.ThreadPriority.Highest;
  2.  
  3.  

شاهد معى هذا المثال الذى يحتوى على العديد من النقاط :-

انسخ الكود
  1.  
  2. private void button3_Click(object sender, EventArgs e)
  3. {
  4. try
  5. {
  6. tx.Suspend();
  7. cmdPause.Enabled = false;
  8. cmdResume.Enabled = true;
  9. }
  10. catch (Exception ex) { }
  11. }
  12.  
  13. private void button4_Click(object sender, EventArgs e)
  14. {
  15. try
  16. {
  17. tx.Resume();
  18. cmdPause.Enabled = true;
  19. cmdResume.Enabled = false;
  20. }
  21. catch (Exception ex) { }
  22. }
  23.  
  24. private void cmdStop_Click(object sender, EventArgs e)
  25. {
  26. try
  27. {
  28. tx.Abort();
  29. }
  30. catch (Exception ex) { }
  31. }
  32. }
  33.  
  34.  

الى اللقاء مع الدرس القادم باذن الله :)

اطيب المنى :)

تم تعديل بواسطه eramax
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

عدنا :

الدرس العاشر : كيفية تحويل الصورة الى string يمكن الاحتفاظ بها واسترجاعها

ربما يكون هذا الدرس خارج نطاق برمجة الشبكات ولكن اردت ان ازودكم بتلك الفكرة

كما زكرنا فى درسا سابق ان كل object يمكن عمل له serialize ويكون فى النهاية مجموعة من ال bytes تمثل ذلك ال object ولكن هناك طريقة اخرى لكى تقوم بتحويل الصورة الى string ولكن يشترط ان يكون ال string من نوع StringBase64 لانه يحافظ على الصورة (لا اعلم لماذا )

شاهد معى هذا الكود :-

انسخ الكود
  1.  
  2. void img2str()
  3. {
  4. Image im =Image.FromFile("c:era.png");
  5. im.save(ms,im.RawFormat);
  6. byte[] array = ms.ToArray();
  7. string img = Convert.ToBase64String(array);
  8. }
  9.  

ولاسترجاع الصورة من ال string

انسخ الكود
  1.  
  2. void str2img(string img)
  3. {
  4. byte[] array = Convert.FromBase64String(img);
  5. Image im = Image.FromStream(new MemoryStream(array));
  6. }
  7.  

الى اللقاء مع الدرس القادم باذن الله :)

اطيب المنى :)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

ملاحظة هامة بخصوص الـSerilization عبر الـSocket

من المشاكل التي قد تحدث اثناء الـdeserialze لكلاس من خلال الشبكة انه قد لا يتعرف على الاسمبل للكلاس ويحدث هذا الإستثناء "no Assembly associated with XML key " والحل هو اما تضمينه مع الـSerialize Object وذلك باستخدام الـSerializationBinder بحيث تقوم بعمل Binding للـClass Type واسناده إلى الـBinder Proparity والموجودة ضمن الـSoapFormatter و الـBinaryFormatter , وعند عمل الـDeserialize نسند الـBinding Object السابق ايضا للـBinary أو الـSoapFormatter Object.

لمزيد من المعلومات حول الـSerializationBinder أنظر المثال التالي:

http://www.codeproject.com/KB/XML/Serialization_Samples.aspx

اما الحل الأسهل فهو تحويل الـClass إلى ملف Dll وذلك من خلال الـClass Library بحيث تقوم بإنشاء مشروع Class Library جديد وتضع الكلاس فيه وتقوم بترجمته إلى ملف Dll ثم تضمن الكلاس في الطرفين برنامج المرسل والمستقبل وكمثال على استخدام هذه الطريقة هنا http://www.socketcoder.com/ArticleFile.asp...mp;ArticleID=59

وبتوفيق للجميع

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

عدنا :

الدرس الحادى عشر : مفهوم ال Thread Pooling وكيفية تطبيقه

طبعا بعد ان تكلمنا عن مفهوم ال Threading وما هى وظيفيته وهى ان تقوم بعمل اكثر من شئ كانهم فى نفس الوقت Concurrent لانه لا يوجد لديك الا Processor واحد ولذلك لا يتم الا عملية واحد فى الوقت نفسه

ولكن ال Threading كما تحدثت هو مجموعة من المؤشرات كل مؤشر يشير على تعليمة فى دالة ما تتم تنفيذها وهكذا

ولكن لخلق ال Thread ياخذ البرنامج وقت ولو انه بسيط ولكن فى حالة انك تريد ان تلك ال Thread تقوم بوظيفة بسيطة سريعة فلذلك فانت تفقد الوقت الكثير لاجل وظائف سريعة

لذلك ظهر مفهوم ال Thread Pool وهى معناه ان نظام التشغيل يقوم بخلق عدد من ال Threads داخل ال Process عدد تلك ال Threads لا يتجاوز ال 25 Thread ويعطيهم لل Process عندما تقوم بالعمل

وعندما تريد ان تسخدم Thread منهم تقوم بمناداتها واعطائها مهمة (دالة) تقوم بعملها وعند انتهائها تقوم بارجاع نفسها الى Thread Pool لكى يمكن استخدامها مرة اخرى اذا احتجت ذلك

هذه الفكرة هى المستخدمة فى الكثير من التطبيقات التى تحتاج الى سرعة عالية

حيث ان البرنامج يوفر الوقت الازم لخلق ال Thread ولكن ال Threads تقوم مخلقه وجاهز للعمل ولكن تنتظر الدالة التى تأخذها

على سبيل المثال فى سيرفرات الويب : - فان كل مستخدم لموقع ما يقوم بطلب الصفحة الفلانيه من الويب سيرفر

وطبعا الاف واحيانا ملايين الافراد يطلبون نفس الصفحة او صفحات معينه على الويب سيرفر فى نفس الوقت

فلو ان الويب سيرفر جاء له طلب وذهب لتنفيذه وعمل Block لباقى الطلبات او عمل Wait لهما فهذا خطأ جدا لانه لكى ينفذ المليون طلب سوف يقضى الكثثير من الوقت

ولكن بظهور مبدأ ال Thread تم حل المشكلة جزئا واستطاع ال Web Server ان يستجيب على الكثير من ال Client فى نفس الوقت وكل Client عند ما يطلب صفحة ما يقوم ال Web Server بتوليد Thread تحمل هذا الطلب وتقوم بنفيذ هذا الطلب لهذا ال Cient وتقوم بارسال الصفحة له

ولكن كان هناك وقت مستنفذ وهذا الوقت هو الوقت الذى تاخذه ال Process فى خلق ال Thread

ولذلك ظهر مبدأ ال Thread Pool لذلك تعمل ال Process ومعها عدد من ال Threads اذا احتاجت اى شئ يكفيها ان تنادى على احدهم وبعد ان يتموا عملهم يرجعون الى ال Pool لكى يكونوا جاهزين لاى عمل اخر يطلب منهم

شاهد معى هذا الكود الذى يشرح كيفية استخدام ال ThreadPool :-

انسخ الكود
  1.  
  2. void printMEss(object mess)
  3. {
  4. Console.WriteLine("I am a Message!"+mess as string);
  5. }
  6. static void cthreadpool()
  7. {
  8. Program px = new Program();
  9. WaitCallback wx = new WaitCallback(px.printMEss);
  10. ThreadPool.QueueUserWorkItem(wx, "ERAMAX");
  11. Console.WriteLine("All Done");
  12. }
  13.  

فى ال ThreadPool كما قلنا فهى تحتوى على عدد لا يزيد عن 25 Thread ولكن مايكروسوفت لم تسميهم Thread لقد اسمتهم WorkItem

الى اللقاء مع الدرس القادم باذن الله :)

اطيب المنى :)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

عدنا :
الدرس الثانى عشر : مقدمة عن استخدام ال WMI
ال WMI هى اختصار ل Windows Management Instrumentation وهى تمثل قاعدة بيانات قوية داخل انظمة مايكروسوفت وندوز كالريجيسترى بل واقوى فمن خلالها تستطيع ان تقوم بعمل query على العمليات التى تحدث فى النظام ويمكن من خلالها عمل restart او shutdown للنظام كما انها كبيرة جدا توفر لك الكثير من القوة فى التحكم فى النظام
لابد لكى تستطيع ان تستخدمها ان تتضمن الاتى :-

انسخ الكود

 

using  System.Management;


هذا شرح لاحد الامثلة عليها :-

انسخ الكود

 

static void WMI_XP(){SelectQuery query = new SelectQuery("SELECT * FROM Win32_Service WHERE state='running'");ManagementObjectSearcher find = new ManagementObjectSearcher(query);try{foreach (ManagementObject mo in find.Get()){Console.WriteLine("Service Name : " + mo["DisplayName"]);//Console.WriteLine("Description : " + mo["Description"]);Console.WriteLine();}}catch (Exception ex) { Console.WriteLine(ex.ToString());}}


ففى هذا البرنامج انا عملت query عن ال services التى وضعها runing وقمت بطباعت اسمائها
الى اللقاء مع الدرس القادم باذن الله :)
اطيب المنى :)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

مشكور اخ eramax

مجهود رائع

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

شكرا اخي على الموضوع الأكثر من رائع

في الحقيقة استخدمت اغلب الدروس و التطبيقات المطروحة من قبلك

لكن بقى اشكال في ما يخص ارسال ملف عبر

socket

تمكنت من ارسال ملف صغير اضغر من 13ك ب لكن في ارسال الملفات الكبيرة

اعتقد انه لابد من تقسيم الملف وارسالها تتابعا

فارجوا ان كان لديك اي شرح تتحفنا به فيما يخص هذا التقسيم و الإرسال واستقبال الملف في الطرف الأخر

مشكور جدا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكــم ورحمـة الله وبركاتــه ،،

كيف حالك إن شاء الله دائمــاً بخير ؟

الف شكرا على الموضوع

انا بدرس برمجة وقواعد البيانات

وبتمنا منك ان تساعدنى ولك منى الف شكر

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكــم ورحمـة الله وبركاتــه ،،شكراً لك اخي الكريم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

+1 للدرس السابع (Serialization).

ولدي سؤال حوله:

إذا كنا نقوم ببرمجة برنامج الخادم لبيئة دردشة (Chat)

هل من الواجب (وربما هي الطريقة الوحيدة) لإرسال قائمة الأشخاص المتواجدين حالياً داخل غرفة ما إلى المستخدمين (Clients) عن طريق عمل (Serialization) لغرض قائمة_المستخدمين

وإرساله عبر الإنترنت للمستخدمين ومن ثم عمل (Deserialization) له على الطرف الآخر وإعادة تحويله إلى غرض يرث من IList مثلاً؟

شكراً لك.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

+1 للدرس السابع (Serialization).

ولدي سؤال حوله:

إذا كنا نقوم ببرمجة برنامج الخادم لبيئة دردشة (Chat)

هل من الواجب (وربما هي الطريقة الوحيدة) لإرسال قائمة الأشخاص المتواجدين حالياً داخل غرفة ما إلى المستخدمين (Clients) عن طريق عمل (Serialization) لغرض قائمة_المستخدمين

وإرساله عبر الإنترنت للمستخدمين ومن ثم عمل (Deserialization) له على الطرف الآخر وإعادة تحويله إلى غرض يرث من IList مثلاً؟

شكراً لك.

الطريقة جيدة ولا مشكلة من تطبيقها لكن الأفضل هو استخدام Service لذلك مثلا من خلال اسخدام WCF Duplex Service يمكن عمل Users list على السيرفر بحيث يتم ارسال اي بيانات جديدة إلى المتصلين مباشرة من خلال تطبيق مبدأ Duplex عليها...

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

شرح رائع

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

سريعا ندخل فى الدرس الثانى :-

الدرس الثانى : ترميز الملفات Encoding

كل ملف تنشئ لابد ان يكون له ترميز معين

ولتوضيح معنى ترميز اقراء الاتى

االترمز هو كم بايت يحتاجها ال char لكى يتم حفظه داخله

فهناك العديد من الترميزات اشهرها الاتى :-

ترميز الاسكى ASCII Encoding : ويتم فيه حفظ ال char على 7 بت ولذك يعطيه الكمبيوتر واحد بايت لان البايت من الصعب تقسيمه

1 Byte = 8Bit
ترميز ال UTF-8 : وبه يمثل ال char داخل بايت كامل مما يجعل يمكن تمثيل عدد كبير من ال char اكثر عددا مما كان فى الاسكى

ترميز ال UTF-16 : نفس الفكرة 16 بت اى 2 بايت

ترميز ال UTF-32 : ايضا نفس الفكرة 32 بت اى 4 بايت طبعا عدد اكبر من ال char يمكن بهذا الترمز التمثيل وبهذا يمكن للعديد من الكلمات بلغات متععدة تكتب داخل وثيقة واحدة بشرط ان الترميز يكون يحتوى هذه اللغات طبعا الحجم حيكبر معاك جدا بالضبط اربع مرات عن الملف العادى الذى بالاسكى

وهكذا ,

اليك بعض الامثلة:

انسخ الكود

 
static void Enc()//---- By Encodding i can convert string to byte array --
{
Encoding e1= Encoding.ASCll;
string str = "EraMaX.Net";
byte[] byarr e1. etBytes(str);
str = e1.GetString(byarr);
Console.WriteLine(str);
foreach (byte b in byarr)
{
Console.WriteLine((char)b);
}
}
 
 
 
 
 
 

انسخ الكود

 
static void strWenc()
{
StreamWriter sw = new StreamWriter(@"c:eraUTF8.txt",false,
Encoding.UTF8);
sw.WriteLine("Hello World!");
sw.WriteLine("hello ");
sw.Close();
StreamWriter swf = new StreamWriter(@"c:eraASCII.txt",false,
Encoding.ASCII);
swf.WriteLine("Hello World!");
swf.WriteLine("hello ");
swf.Close();
StreamWriter swx = new StreamWriter(@"c:eraUTF32.txt,false,
Encoding.UTF32 );
swx .WriteLine("Hello World!");
swx .WriteLine("hello ");
swx .Close();
Console.WriteLine(" ll Done!");
}
 
 
 
 
 
 

=csharp>=csharp>

الى اللقاء فى الدرس القادم باذن الله =csharp>=csharp>

 

السلام عليكم

لو سمحت الكود مش ظاهر عندى غير ده

  • StreamWriter sw = new StreamWriter(@"c:eraUTF8.txt",false,
  • Encoding.UTF8);
  • sw.WriteLine("Hello World!");
  • sw.WriteLine("hello ");
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

لو سمحت الكود مش ظاهر عندى يا جماعه

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .