قواعد المشاركة في المنتدى

(قسم الاعلانات) الموضوع:افضل شركة ترميم منازل بالرياض شركة فرصة بواسطة: (fast2trans) :: (قسم الاعلانات) الموضوع:شركة فرصة تخزين اثاث وتخزين عفش بواسطة: (fast2trans) :: (قسم الاعلانات) الموضوع:افضل شركة عزل فوم ركن البناء بواسطة: (fast2trans) :: (قسم الاعلانات) الموضوع:افضل شركة تخزين اثاث بالرياض بواسطة: (fast2trans) :: (قسم الاعلانات) الموضوع:افضل شركة نقل اثاث وعفش بالرياض بواسطة: (fast2trans) :: (قسم الاعلانات) الموضوع:افضل شركة كشف تسربات المياة بواسطة: (fast2trans) :: (قسم الاعلانات) الموضوع:افضل شركة لعزل الخزانات بواسطة: (fast2trans) :: (قسم الاعلانات) الموضوع:افضل شركه مكافحه حشرات ورش مبيدات بواسطة: (fast2trans) :: (قسم الاعلانات) الموضوع:افضل شركة تنظيف منازل بواسطة: (fast2trans) :: (أخبار التكنولوجيا) الموضوع:التقرير لشهرى يناير و فبراير توصيات الفوركس من النخبة بواسطة: (النخبة للعملات) :: (أخبار التكنولوجيا) الموضوع:التقرير لشهرى يناير و فبراير توصيات الفوركس من 0 بواسطة: (النخبة للعملات) :: (قسم الاعلانات) الموضوع:مصنع ألواح الخليج - تكنو بوند بواسطة: (tbond) :: (منتدى الأكسس) الموضوع:تفعيل القوائم المنسدلة بواسطة: (د.كاف يار) :: (قسم الاعلانات) الموضوع:شركة تنظيف بواسطة: (السيد اسامة) :: (أخبار التكنولوجيا) الموضوع:برنامج محاسبة بواسطة: (لمياء حمود) :: (قسم الاعلانات) الموضوع:دورة القيادة الفعالة لفريق العمل عالى الأداء بواسطة: (جيت واى للتدريب) :: (منتدى Microsoft Excel) الموضوع:تطبق الكود على كامل الشته بواسطة: (nmshan1) :: (منتدى الأكسس) الموضوع:كيفية ادخال رقم من comand الى txtbox بواسطة: (startnet) :: (منتدى الأكسس) الموضوع:الطرح التراكمي بالعمود بواسطة: (startnet) :: (قسم الاعلانات) الموضوع:فى دورة التسويق الإلكترونى بواسطة: (جيت واى للتدريب)


راديو القرآن

المواضيع المثبته: (منتدى Microsoft Excel) الموضوع:هيا بنا نتعلم كتابة الكود فى الاكسيل VBA بواسطة: (ramies) :: (Oracle قسم قواعد البيانات أوراكل) الموضوع:اعداد و تنصيب اوراكل 9i ويندز NT/2000/XP بواسطة: (oracle_egypt) :: (منتدى برمجة الجرافكس) الموضوع:الجزء الاول من دروس تعلم GDI بواسطة: (alaa gomaa) :: (Oracle قسم قواعد البيانات أوراكل) الموضوع:ADF بواسطة: (وليد القدسي) :: (منتدى Microsoft Visual Basic) الموضوع:دروس صوت وصورة للربط بين اسكيوال سيرفر والفجوال بيسيك بواسطة: (wael abed) :: (منتدى Microsoft Excel) الموضوع:دروس إكسل و شرح الدوال و تقنيات متقدمة بواسطة: (صهيب جاويش) :: (منتدى مبرمجي Microsoft Visual VB.NET) الموضوع:طريقة تخزين أي نوع ملفات في Access DataBase ومشاهدتها وتشغيلها بواسطة: (jbsa) :: (منتدى برمجة الألعاب) الموضوع:اعلان هام بواسطة: (مصطفي البارودي) :: (منتدى البرامج) الموضوع:7 اسطوانات لتعليم شهاده ICDL بالصوت والصوره بواسطة: (مستشفى الكمبيوتر) :: (منتدى تحليل و تصميم نظم المعلومات) الموضوع:تحليل كامل لبرنامج حسابات بواسطة: (الشجرة الطيبة) :: (قسم الدعم الفني) الموضوع:هل تريد التحكم بجهازك كأنك محترف بواسطة: (ياسر جمال) :: (منتدى Microsoft Excel) الموضوع:open office بواسطة: (ramies) :: (منتدى مبرمجي لغة جافا JAVA) الموضوع:درس : الاستثناءات في جافا Exceptions بواسطة: (nardien28) :: (قسم المواضيع المميزة) الموضوع:أرشيف للمشاركات المتميزة بواسطة: (أبو أفنان) :: (منتدى برمجة الشبكات في بيئة الدوت نت) الموضوع:عمل برنامج بسيط مع قاعدة بيانات اكسس على شبكة محلية بواسطة: (allnsh 3) :: (منتدى مبرمجي ASP.NET) الموضوع:كتاب تصميم موقع اخباري بواسطة: (م.محمد الساعدي) :: (منتدى ADO.NET العام) الموضوع:البدء مع ADO.NET بواسطة: (HnHn) :: (منتدى أجاكس(Asynchronous JavaScript and XML)) الموضوع:نبذة مختصرة عن تعريف تقنية أجاكس بواسطة: (عبدالله جابر شقليه) :: (منتدى البرامج) الموضوع:برنامج رهيب انتا تتكلم والكمبيوتر يكتب بالعربى بواسطة: (مستشفى الكمبيوتر) :: (منتدى Borland Delphi) الموضوع:تحويل الأرقام إلى نص بواسطة: (مهند عبادي)

عدد الصفحات : 9  1  2  3  4  5   > » إضافة رد إضافة موضوع جديد

> Dot Net Networks & TCP/IP Programming,تعلم برمجة الشبكات والنظم الموزعة وبرتوكول ال TCP\IP
Bookmark and Share
تقييم الموضوع Label معدل التقيم:4
مشاركةالأحد,28/رمضان/1426 هـ,06:00 صباحاً
المشاركة #1

خبير برمجة شبكات ونظم موزعة
الرتبة في المنتدى:رائد

أيقونة المجموعة

المجموعة: مجموعة الخبراء المعتمدين
المشاركات: 506
سجل في:الأحد,28/رمضان/1426 هـ,04:59 صباحاً
الدولة:الأردن
رقم العضوية: 6228



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



حمل من هنا الفصول الثلاث الأولى من كتاب احترف برمجة الشبكات والنظم الموزعة مجانا

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

ملاحظة إلى كل مبرمجين ال VB.NET وحتى تعم الفائدة على الجميع تستطيعون ترجمة الأكواد من C Sharp إلى VB.NET باستخدام الرابط التالي :
http://www.developerfusion.com/utilities/convertcsharptovb.aspx
حيث قمت بتجربة الترجمة لأغلب الأكواد ولم يكن هنالك أي مشاكل , من الممكن وجود بعض الإختلافات في بعد أسماء ال Methods لكن في الأغلب متشابهة ولمعرفة الأسم المقابل لها في VB.NET تستطيع الضغط عليها في C# Editor والضغط على المفتاح F1 .. وأي سؤال أو استفسار بخصوص التحويل إلى ال VB.NET لهذه الأكواد انا مستعد ..
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالاثنين,29/رمضان/1426 هـ,01:29 مساءً
المشاركة #2

مشرف سابق لقسم الدعم الفني والشبكات وأمنها
الرتبة في المنتدى:رائد

أيقونة المجموعة

المجموعة: المشرفين القدامى
المشاركات: 564
سجل في:الاثنين,27/شعبان/1425 هـ,09:06 مساءً
الدولة:فلسطين
رقم العضوية: 312



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


--------------------

" target="_blank" href="http://www.arabmoheet.net/forum/Members_Upload_Pics/312/MCSES.JPG[/IMG][/ALIGN]" target="_blank">http://www.arabmoheet.net/forum/Members_Upload_Pics/312/MCSES.JPG[/IMG][/ALIGN]

Mohammed A. R. Eleyan


B.S.C Degree in Computer Engineer & Information Technology



MCP
MCTS: SQL Server 2005
MCSA, MCSA(Security), MCSA (Messaging)
MCSE, MCSE(Security)



للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالثلاثاء,30/رمضان/1426 هـ,10:39 مساءً
المشاركة #3

خبير برمجة شبكات ونظم موزعة
الرتبة في المنتدى:رائد

أيقونة المجموعة

المجموعة: مجموعة الخبراء المعتمدين
المشاركات: 506
سجل في:الأحد,28/رمضان/1426 هـ,04:59 صباحاً
الدولة:الأردن
رقم العضوية: 6228



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

الدرس الأول : مقدمة في برمجة الشبكات و بروتوكول TCP/IP
من المعروف ان الشبكة هي مجموعة من الأجهزة متصلة مع بعضها عبر وسيلة اتصال معينة ومن هنا سيندرج لدينا التقسيم المعروف لمنظمة OSIلعملية الإتصال والتي تتكون من سبعة طبقات كل طبقة منها تشكل وظيفة بعينها وتم اختصارها الى اربعة طبقات في برتوكول TCP/IP (خمسة في بعض الكتب)وتبين الصورة المرفقة هذه الطبقات ,


لإجراء عملية الاتصال بين Client و Server يلزم ما يلي :

في الجهاز المرسل Client :
1- تبدا عملية توليف الرسالة المرسلة في ال Application Layer ووظيفتها هنا التعامل مع الرسالة نفسها وتحويلها من صيغة نصية الى Data يمكن ارسالها عبر الشبكة , ففي برمجيات الدردشة Chat يتم تحويل النص المكتوب الى ASCII Code ثم يتم تحويل هذا الأسكي الى مجموعة من Binary Code توضع في مصفوفة لتجهيزها وارسالها عبر Socket (بقية الطبقات) وهنا توضيح هذه الخطوة في الكود

 كود
String str=Console.ReadLine(); // كتابة الرسالة هنا ووضعها في متغير من نوع ستريغ
ASCIIEncoding asen= new ASCIIEncoding(); // تحويل النص المكتوب الى الأسكي
byte[] ba=asen.GetBytes(str); //تحويل الأسكي الى باينري كود وتخزينها في مصفوفة من النوع بايت

في نموذج 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 يستطيع استقبال الرسالة , وهنا مثال يوضح عمل هذه الطبقة

 كود
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 وهي مكون من Datalink Layer و Network Layer في OSI
طبعا يتولى نظام التشغيل و بروتوكول TCP/IP ارسال الرسالة عبر الشبكة
وهنا ملخص عمل كل من Network Layer و DataLink Layer


 كود
Network layer :
Layer 3 of the Open 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


 كود
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

للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالأربعاء,01/شوال/1426 هـ,02:48 مساءً
المشاركة #4

خبير برمجة شبكات ونظم موزعة
الرتبة في المنتدى:رائد

أيقونة المجموعة

المجموعة: مجموعة الخبراء المعتمدين
المشاركات: 506
سجل في:الأحد,28/رمضان/1426 هـ,04:59 صباحاً
الدولة:الأردن
رقم العضوية: 6228



مجموعة الأمثلة لدرس الأول - للمساعدة في التطبيق
 كود
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); // Open 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 );}
}

للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالأربعاء,01/شوال/1426 هـ,02:54 مساءً
المشاركة #5

خبير برمجة شبكات ونظم موزعة
الرتبة في المنتدى:رائد

أيقونة المجموعة

المجموعة: مجموعة الخبراء المعتمدين
المشاركات: 506
سجل في:الأحد,28/رمضان/1426 هـ,04:59 صباحاً
الدولة:الأردن
رقم العضوية: 6228



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

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

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemnetsockets.asp

و الرابط التالي لتعرف على مكونات System.Net بتفصيل:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemnet.asp

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



حيث تساعدك هذه المكتبة على تحويل أي اوبجكت إلى باينري باستخدام Binary Reader لتسهل إرساله عبر الشبكة باستخدام Network Stream ثم تحويله مرة أخرى إلى اوبجكت باستخدام Binary Writer , وكمثال تطبيقي على هذا سوف نقوم ببناء برنامج يقوم بعملية نقل الصورة من جهاز إلى أخر Client/Server وللبدء قم بإنشاء New Form جديد كما هو في الشكل التالي :



في البداية قم بإضافة النيم سبيسس التالي :
 كود
using System.Net.Sockets;
using System.IO;

للإجراء عملية الإرسال لا بد أولا من اخذ اوبجك من الكلاس MemoryStream والتي سوف نستخدمها لتخزين الصورة داخل الذاكرة بشكل Stream لكي نحولها لاحقا إلى مصفوفة Binary ثم إرسالها عبر NetworkStream إلى جهاز السيرفر والذي سأتي على شرحه في الجزأ الثاني من هذا الدرس, انظر الكود التالية :

 كود
try
{
تحديد الباث الخاص بصورة
openFileDialog1.ShowDialog ();
string mypic_path =openFileDialog1.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 );}


للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالأربعاء,01/شوال/1426 هـ,02:59 مساءً
المشاركة #6

خبير برمجة شبكات ونظم موزعة
الرتبة في المنتدى:رائد

أيقونة المجموعة

المجموعة: مجموعة الخبراء المعتمدين
المشاركات: 506
سجل في:الأحد,28/رمضان/1426 هـ,04:59 صباحاً
الدولة:الأردن
رقم العضوية: 6228



بسم الله الرحمن الرحيم
الدرس الثاني: الجزء الثاني
سوف ابدأ في هذا الجزء شرح الجزء الخاص بالسيرفر والذي يقوم بعملية التصنت على البورت واستقبال ال 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);// Open 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 جديد كما في الشكل التالي :



أضف الميثود السابقة في كلاس البرنامج ثم قم باستدعائها بواسطة وضع 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.. وهنا لا يؤثر البرنامج على موارد النظام بشكل كبير انظر الشكل التالي :



لاحظ انه قبل اضافة ال 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 والذي سأتي على شرحه لاحقا بإذن الله ....
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالأربعاء,01/شوال/1426 هـ,03:02 مساءً
المشاركة #7

خبير برمجة شبكات ونظم موزعة
الرتبة في المنتدى:رائد

أيقونة المجموعة

المجموعة: مجموعة الخبراء المعتمدين
المشاركات: 506
سجل في:الأحد,28/رمضان/1426 هـ,04:59 صباحاً
الدولة:الأردن
رقم العضوية: 6228



السلام عليكم , سوف اقوم بإدراج الأمثلة التي يتم طرحها بعد كل درس .. لكن اتمنى القيام بالتطبيق العملي لكل مثال حتى تعم الفائدة على الجميع ...
هنا البرنامج الخاص بدرس الثاني والذي يستخدم فيه بروتوكول ال TCP لنقل الصورة من جهاز Client الى Server ..



المثال :



الملفات المرفقة
 Images Sender.rar ( 55.74ك ) عدد مرات التنزيل: 1350
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالأربعاء,01/شوال/1426 هـ,03:08 مساءً
المشاركة #8

خبير برمجة شبكات ونظم موزعة
الرتبة في المنتدى:رائد

أيقونة المجموعة

المجموعة: مجموعة الخبراء المعتمدين
المشاركات: 506
سجل في:الأحد,28/رمضان/1426 هـ,04:59 صباحاً
الدولة:الأردن
رقم العضوية: 6228



بسم الله الرحمن الرحيم
الدرس الثالث : 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والتنصت عليها ثم استلام الرسالة عبر هذا البورت وتوزيعها على الكل بدون تحديد رقم بورت معين حيث يتم تسليمها على البورت المخصص لعملية البرودكاست وهو البورت صفر:

 كود
لتعريف نقطة الهدف ورقم البورت الخاصة بسيرفر ونستخدمها لكي يقوم السيرفر بستلام الرسالة
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();

تم الإنتهاء الأن من شرح الجزأ الخاص بسيرفر .. وسأعرض هنا الكود الخاص به بشكل كامل لكي تستطيع تطبيقه وهذا هو الكود:
 كود
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 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();
}
}

للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالأربعاء,01/شوال/1426 هـ,03:11 مساءً
المشاركة #9

خبير برمجة شبكات ونظم موزعة
الرتبة في المنتدى:رائد

أيقونة المجموعة

المجموعة: مجموعة الخبراء المعتمدين
المشاركات: 506
سجل في:الأحد,28/رمضان/1426 هـ,04:59 صباحاً
الدولة:الأردن
رقم العضوية: 6228



نقاش تابع لدرس الثالث :

السؤال الأول : تحدثت لنا عن البرودكاست وقلت انه بإمكانك البث الى اي جهاز على الشبكة لكنك قمت بستخدام الخاصية any مع انه توجد خاصية افضل منها وهي IPAddress.Broadcast فلماذا استخدمت الخاصية any ولم تستخدم هذه الخاصية؟
تستطيع عمل البرود كاست بطريقتين اما بستخدام IPAddress.Any او بستخدام IPAddress.Broadcast ولكن يختلف في ان الأول يلزمه وجود سيرفر يقوم بعملية التنصت على البورت المحدد حيث يستقبل من خلاله اي رسالة ثم يقوم ببثها الى كل الأجهزة اما الثاني فتستطيع من خلاله عمل بث الى كل الأجهزة حيث لا ضرورة لوجود جهاز سيرفر بحيث ان الكل يمكنه التنصت على بورت معين يستقبل ويرسل من خلالها ...

السؤال الثاني: طبعا لم تشرح لنا ال IP Multicasting ومع ذلك استخدمت ال IPAddress.Any وعلى حد علمي ان هذه الخاصية تستخدم في ال Multicasting فلماذا استخدمتها في ال برودكاست ؟؟!!!
كنت انوي شرح هذا الموضوع في الدرس القادم وبما انك طرحت هذا السؤال فسوف اشرحها لك, نعم استخدمت الخاصية IPAddress.Any في البرودكاست وكلامك ايضا صحيح حيث تستخدم في ال Multicast لكن الفرق اني لم احدد اي مجموعات ولم اقم بوضع ال IP Multicasting وهو محدد بين 224.0.0.0 و 224.0.0.255 في الشبكات المحلية LAN , لذلك اعتبرناها على انها نوع من البرودكاست ..

السؤال الثالث: لا ارى فرقا بين البرود كاست و ال Multicast كون ان كليهما يمكن استخدامهما بوجود سيرفر او بدون وجود سيرفر فما هو الفرق؟؟
لا تستعجل فسوف اشرحها إن شاء الله في الدرس القادم لكن عدوني ان يكون هذا النقاش بشكل دائم في الدروس القادمة ...

للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالأربعاء,01/شوال/1426 هـ,04:24 مساءً
المشاركة #10

مشرف سابق لقسم الدعم الفني والشبكات وأمنها
الرتبة في المنتدى:رائد

أيقونة المجموعة

المجموعة: المشرفين القدامى
المشاركات: 564
سجل في:الاثنين,27/شعبان/1425 هـ,09:06 مساءً
الدولة:فلسطين
رقم العضوية: 312



أخ فادي دروس اكثر من رائعه ... و جاري التطبيق ... و عند انتهائي من التطبيق سأطلعك على النتائج أولا بأول ...
و سأقوم بفتح النقاش حول الاسئله المطروحه ان شاء الله.

أشكرك اخي و مارس ابداعاتك و ننتظر منك المزيد.


--------------------

" target="_blank" href="http://www.arabmoheet.net/forum/Members_Upload_Pics/312/MCSES.JPG[/IMG][/ALIGN]" target="_blank">http://www.arabmoheet.net/forum/Members_Upload_Pics/312/MCSES.JPG[/IMG][/ALIGN]

Mohammed A. R. Eleyan


B.S.C Degree in Computer Engineer & Information Technology



MCP
MCTS: SQL Server 2005
MCSA, MCSA(Security), MCSA (Messaging)
MCSE, MCSE(Security)



للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة

    

عدد المتصفحين لهذا المنتدى «1»: (الضيوف «1» - المتخفون «0»)
الأعضاء «0»: .

عدد الصفحات : 9  1  2  3  4  5   > » إضافة رد جديد إضافة موضوع جديد



 
الوقت الأن:اليوم,08:49 مساءً بتوقيت القدس المحتلة

Powered By arabmoheet v3.1

منتديات المحيط العربي  -  راسلنا  -   أعلى
X   رسالة المنتدى
(سوف يتم اغلاق هذه النافذة بعد 2 ثانية)
X   رسالة المنتدى
(سوف يتم اغلاق هذه النافذة بعد 2 ثانية)