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

(قسم الاعلانات) الموضوع:كتاب الكلمات والأشياء بي دي إف بواسطة: (كريم يونس) :: (قسم الدعم الفني) الموضوع:شركة تزيين حدائق فى ابوظبى 0547735525 هاند ميد بواسطة: (RODY2020) :: (قسم الاعلانات) الموضوع:أرخص شركات لترميم وبناء حمامات السباحة بالشارقة 0569795951 مع المحترفون بواسطة: (zena fathy) :: (قسم الدعم الفني) الموضوع:شركة تنظيف سجاد مع التعقيم بالبخار في الرياض 0560387770 فرسان العرب بواسطة: (RODY2020) :: (قسم الاعلانات) الموضوع:اهم النصائح من الايمان كلين لتنظيف المياه 0500096306 بواسطة: (zena fathy) :: (قسم الاعلانات) الموضوع:أرخص شركات مكافحة الحشرات بالرياض 0560387770 فرسان العرب بواسطة: (zena fathy) :: (قسم الاعلانات) الموضوع:افضل شركة تنظيف بحفر الباطن بواسطة: (منهل المعرفه) :: (قسم الاعلانات) الموضوع:ارخص شحن برى سريع بواسطة: (شام السيد) :: (أخبار التكنولوجيا) الموضوع:العملات الرقمية هل هي الصورة المستقبلية للأموال؟؟ بواسطة: (Mohammed Hafiz) :: (قسم الشكاوي والمشاكل الفنية والملاحظات) الموضوع:Cheapest Madden NFL 19 Coins بواسطة: (Anthony78) :: (قسم الاعلانات) الموضوع:افضل شركة تمديد مواسير الغاز بشروط الدفاع المدني بواسطة: (كريم يونس) :: (منتدى ال SQL العام) الموضوع:شركه تنظيف مكيفات بالرياض بواسطة: (uj]hggعبدالله) :: (قسم الاعلانات) الموضوع:أفضل شركة لتركيب الباركية بالشارقة 0507172540 الجوهرة الملكية بواسطة: (magda manfy) :: (قسم الاعلانات) الموضوع:ديكورات وتشطيبات 2021 مع شركة عقارى01100448640 بواسطة: (husayn fahmi) :: (قسم الاعلانات) الموضوع:احدث ديكورات الريسبشن مع شركة عقارى01100448640 بواسطة: (husayn fahmi) :: (قسم الاعلانات) الموضوع:الكبسولة المبرمجة وخسارة الوزن في 4 أشهر فقط بواسطة: (engoma) :: (منتدى Microsoft Excel) الموضوع:شرح الفيجوال بيزيك للمتوسطين vba بواسطة: (hs889) :: (قسم الاعلانات) الموضوع:شركة ركن الجنوب لمكافحة الحشرات بخميس مشيط بواسطة: (غعا) :: (قسم الاعلانات) الموضوع:حمامات كبيرة مع شركة عقارى 01100448640 بواسطة: (husayn fahmi) :: (قسم الاعلانات) الموضوع:سايتوتك 200 للبيع الان وحصري 00962781150400 حبوب سايتوتك المعتمده للبيع بواسطة: (momo50080)

المواضيع المثبته: (منتدى أنظمة الشبكات وأمنها) الموضوع:ماهو الـ IPSec بواسطة: (khaled helal) :: (قسم التعاميم والشكاوي) الموضوع:هنيئا للشعب المصري بواسطة: (صهيب جاويش) :: (قسم الدروس و الدورات) الموضوع:دروس فيديو للمهندس عدي لتعليم فيجوال بيسك دوت نت بواسطة: (المهندس عدي) :: (Oracle قسم قواعد البيانات أوراكل) الموضوع:دورة قواعد البيانات (( اوراكل للمبتدئين )) بواسطة: (السند العربي) :: (منتدى Borland Delphi) الموضوع:دروس دلفى بواسطة: (khaled helal) :: (منتدى البرامج) الموضوع:7 اسطوانات لتعليم شهاده ICDL بالصوت والصوره بواسطة: (مستشفى الكمبيوتر) :: (منتدى Microsoft SQL Server) الموضوع:تابعوا دروس sql2000 بواسطة: (dody) :: (قسم المواضيع المميزة) الموضوع:تحديث قاعدة بيانات لدى عميل عن طريق الإنترنت... بواسطة: (أبو رهف) :: (منتدى Borland Delphi) الموضوع:دورة تعليمية في تصميم دليل هاتف في دلفي بواسطة: (مهند عبادي) :: (Oracle قسم قواعد البيانات أوراكل) الموضوع:E-Business Suite بواسطة: (وليد القدسي) :: (منتدى برمجة التقارير) الموضوع:كيف ربط الكرستال ربورت بالنت2008 بواسطة: (raaddawood) :: (منتدى الكتب الالكترونية) الموضوع:مجموعة كبيرة من السرفرات بواسطة: (يوسف) :: (القسم المفتوح) الموضوع:نصيحة لوجه الله بواسطة: (غزاوية أصيلة) :: (منتدى الوورد والباور بوينت) الموضوع:عجائب و مهارات إستخدام برنامج " وورد " بواسطة: (مرحبا الساع) :: (قسم الدروس و الدورات) الموضوع:دورة شاملة في VB.Net المستوى الأول بواسطة: (مهند عبادي) :: (منتدى الدعم الفني للماسنجر المحيط العربي) الموضوع:اقتراحات تطوير الماسنجر بواسطة: (jbsa) :: (منتدى الوورد والباور بوينت) الموضوع:مكتبة الوورد بواسطة: (ramies) :: (منتدى مبرمجي ASP.NET) الموضوع:كتاب تصميم موقع اخباري بواسطة: (م.محمد الساعدي) :: (قسم الدروس و الدورات) الموضوع:برمجة بصمة الاصبع مع الدوت نت Microsoft FingerPrint Reader بواسطة: (FunctionSys) :: (منتدى الأكسس) الموضوع:مثال يجمع عده افكار به فائده ان شاء الله بواسطة: (startnet)

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

> Dot Net Networks & TCP/IP Programming,تعلم برمجة الشبكات والنظم الموزعة وبرتوكول ال TCP\IP
Bookmark and Share
تقييم الموضوع Label معدل التقيم:4
مشاركةالجمعة,17/شوال/1426 هـ,10:36 مساءً
المشاركة #21

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

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

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



الأمثلة الخاصة بدرس السادس :
SMTP & POP3 Programming



الملفات المرفقة
 امثلة الدرس السادس.rar ( 57.5ك ) عدد مرات التنزيل: 1022
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالأربعاء,22/شوال/1426 هـ,12:44 مساءً
المشاركة #22

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

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

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



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

الدرس السابع: HTTP – Hyper Text Transfer Protocol Programming

تتلخص وظيفة ال HTTP بشكل عام على انه البرتوكول المستخدم لتوصيل طلب المستخدم User Request إلى الويب سيرفر ثم قيام ال web server بالرد على ال Request والذي يسمى ب Server Response وبتأكيد تستطيع نقل جميع أشكال ال (Multimedia) من النص وصورة و صوت و فيديو وغيره .. من ال Web Server إلى ال Client Application باستخدام Byte Stream object.
يعمل برتوكول ال HTTP على ال Application Layer وهذا يعني استخدامه بشكل مباشر من واجهة المستخدم كما هو الحال في DNS,SMTP,POP3,FTP انظر إلى الشكل التالي:


أولا : Downloading From Web Server
نستطيع التعامل مع ال Web Server في الدوت نيت باستخدام الكلاس WebClient الموجود في النيم سبيس System.Net إذ تقدم لنا جميع الإمكانيات لتوصيل طلب الزبون و الرد عليهUser Request & Server Response وتدعم ال WebClient Class ثلاثة Methods لتحميل البيانات من ال Web Server وهي:

1- DownloadData ووظيفتها جلب البيانات من ال Web Server وتخزينها في Byte Array وتعرض على شكل HTML Code وتستخدم كما يلي كمثال :
 كود
using System;
using System.Net;
using System.Text;
class DownloadData_Method
{
public static void Main ()
{
WebClient wc = new WebClient();
byte[] response = wc.DownloadData(http://www.google.com");
Console.WriteLine(Encoding.ASCII.GetString(response));
}
}

2- DownloadFileووظيفتها نقل ملف ما من ال Web Server وتخزينها مباشرة في Local Computer وهو سهل الاستخدام جدا إذ ما عليك سوا تمرير موقع الملف والمكان الذي تريد تخزين الملف فيه ويستخدم كما يلي كمثال :
 كود
using System;
using System.Net;

class DownloadFile_Method
{
public static void Main ()
{
WebClient wc = new WebClient();
string filename = "C:\\ra.zip";

Console.WriteLine("Download in Progress Please Waite...");

wc.DownloadFile(http://www.personalmicrocosms.com/zip/ra.zip", filename);

Console.WriteLine("file downloaded");
}
}


3- OpenRead ووظيفتها إنشاء Read Only Stream بين الزبون والسيرفر لجلب بيانات من URL محدد وتخزينه في Stream Object بعد تمرير ال URL للموقع الذي تريد عرضه وباستخدام الميثود ReadLine نستطيع عرض البيانات المخزنة في ال Stream Object على شكل HTML Code .
ملاحظة : تستخدم الميثود Peek لمعرفة نهاية ال Stream Object .
 كود
using System;
using System.IO;
using System.Net;

class OpenRead_Method
{
public static void Main ()
{
WebClient wc = new WebClient();
string response;

Stream strm = wc.OpenRead(http://www.google.com");
StreamReader sr = new StreamReader(strm);

while(sr.Peek() > -1)
{
 response = sr.ReadLine();
 Console.WriteLine(response);
}
sr.Close();
}
}


ويحتوي ال WebClient Class على مجموعة من ال Properties والتي تستخدم لجلب معلومات عن ال Web Host مثلproperty ResponseHeaders والذي يستخدم لجلب معلومات هامة عن ال web host مثل عدد ال Headers ونوع ال cash control واسم ال Server و نوع ال Encoding المستخدم وغيرها من المعلومات الهامة, ويستخدم كما يلي كمثال:
 كود
using System;
using System.Net;

class ResponseHeaders_property
{
public static void Main ()
{
WebClient wc = new WebClient();
byte[] response = wc.DownloadData(http://www.google.com");
WebHeaderCollection whc = wc.ResponseHeaders;
Console.WriteLine("header count = {0}", whc.Count);
for (int i = 0; i < whc.Count; i++)
{
Console.WriteLine(whc.GetKey(i) + " = " + whc.Get(i));
}
}
}

//Output:
//header count = 6
//Cache-Control = private
//Content-Type = text/html
//Set-Cookie = PREF=ID=6ae22f44980c5d78…
//7JRA; expires=Sun, 17-Jan-2038 19:14:
//Server = GWS/2.1
//Transfer-Encoding = chunked
//Date = Wed, 23 Nov 2005 10

58 GMT

ثانيا : Uploading to Web Server
يدعم ال WebClient أربعة Methods لتحميل البيانات إلى ال Web Server وهي :
1- OpenWrite ويستخدم لإرسال Stream Data إلى ال Web Server وذلك بعد تمرير عنوان ال URL للملف والنص الذي نريد كتابته على ال Web Page طبعا يجب أن تملك الصلاحيات لذلك ويستخدم كما يلي كمثال :
 كود
using System;
using System.IO;
using System.Net;
class OpenWrite_method
{
public static void Main ()
{
WebClient wc = new WebClient();
string data = "<h1>Welcome to My Page</h1>";
Stream strm = wc.OpenWrite("C:\\mypage.html");
StreamWriter sw = new StreamWriter(strm);
sw.WriteLine(data);
sw.Close();
strm.Close();
}
}


2 – UploadData ويستخدم لنقل محتويات مصفوفة من النوع Byte إلى ال Web Server وهذا يعني انك تستطيع من خلالها رفع أي نوع من البيانات مثل النص الصور الفيديو وغيره إلى ال web server بعد تحويلها إلى Byte Array ويستخدم كما يلي كمثال :
 كود
using System;
using System.Net;
using System.Text;

class UploadData_Method
{
public static void Main ()
{
WebClient wc = new WebClient();
string data = "This is The Text Before Converted it to Byte";
byte[] dataarray = Encoding.ASCII.GetBytes(data);
wc.UploadData("C:\\mydata.txt", dataarray);
}
}


3- UploadFile وتستخدم هذه الميثود لرفع ملف من ال Local Computer إلى ال Web Host وهي بسطة الاستخدام جدا وتستخدم كما يلي كمثال :
 كود
using System;
using System.Net;

class UploadFile_Method
{
public static void Main ()
{
WebClient wc = new WebClient();
wc.UploadFile(http://www.yoursite.com", "C:\\myfile.html");
}
}


4- UploadValues وتستخدم لرفع Collection من البيانات وال values الخاصة بها إلى الويب سيرفر وذلك بعد تحويل ال Collection إلى Byte Array ولتعريف Collection نستخدم الكلاس NameValueCollection الموجود في النيم سبيس System.Collections.Specialized وبعد تعريفه نستخدم الميثود add لإضافة ال Collection جديد.. وتستخدم كما يلي كمثال :
 كود
using System;
using System.Collections.Specialized;
using System.Net;
using System.Text;

class UploadValues_Method
{

public static void Main ()
{
WebClient wc = new WebClient();
NameValueCollection nvc = new NameValueCollection();
nvc.Add("firstname", "Fadi");
nvc.Add("lastname", "Abdel-qader");
byte[] response = wc.UploadValues(http://localhost/mypage.aspx", nvc);
Console.WriteLine(Encoding.ASCII.GetString(response));
}
}

ثالثا :المواضيع الأكثر تقدما في ال HTTP Programming:

يعتبر هذا الجزء من أهم الأجزاء في برمجة تطبيقات Web Client Applications والذي سوف نتحدث فيه عن استخدام كل من ال HttpWebRequest Class و ال HttpWebResponse Class :

1- استخدام HttpWebRequest Class :
يحتوي هذا الكلاس على مجموعة من ال Properties والتي تستخدم بشكل أساسي في تطبيقات ال Web Client Applications لإنشاء مثل :

1- استخدام خاصية ال Web Proxy : والتي نمرر فيها عنوان ال Proxy Server ورقم البورت حتى نستطيع التعامل مع ال HTTP Web Requestsمن خلف Proxy Server أو Firewall ويتم تعريف ال Proxy Server Prosperity كما يلي كمثال :
 كود
using System;
using System.Net;

class ProxyServer_Property
{
public static void Main ()
{
HttpWebRequest hwr = (HttpWebRequest)WebRequest.Create(
http://www.google.com");

WebProxy proxysrv = new WebProxy(http://proxy1.server.net:8080");
hwr.Proxy = proxysrv;

}
}


نعرف في البداية ال HttpWebRequest Object ثم نعرف WebProxy Object من الكلاس webProxy ونسند له عنوان ال Proxy Server ورقم البورت وبعد ذلك نستطيع إسناده إلى أي اوبجكت باستخدام الخاصية Proxy التي تكون موجودة عادة في جميع HttpWebRequest Objects ..

2- استخدام ال HttpWebrequest لإرسال بيانات إلى الويب سيرفر باستخدام ال Streams وتستخدم كما يلي كمثال :
 كود
HttpWebrequest hwr = (HttpWebRequest)WebRequest.Create(http://localhost");
Stream strm = hwr.GetRequestStream();
StreamWriter sw = new StreamWriter(strm);
sw.WriteLine(data);


بعد تعريف ال HttpWebRequest Object نقوم بتعريف Stream Object ونسند له ال Request Stream من خلال الميثود GetRequestStream .

2 - استخدام HttpWebResponse Class:

تستخدم ال HttpWebResponse Object لإرجاع بيانات من الويب سيرفر إلى ال Client حيث نستخدم الميثود GetResponse و الميثود BeginGetResponse لهذه العملية ولا يوجد فرق في وظيفة هذه الميثودس سوى أن BeginGetResponse تعتبر asynchronous Method .
يحتوي ال HttpWebResponse Object على عدد من ال Properties وهي :

1- CharacterSet : وتستخدم لتحديد نوع ال Character Set
2- ContentEncoding : وتستخدم لعملية ال encoding
3- ContentLength : وتستخدم لمعرفة حجم الرد
4- ContentType : لتحديد نوع ال Respone
5- Cookies : لتعامل مع ال Cookies ولستخدامها يجب أولا إنشاء ملف Cookie فارغ وتعريفه كما يلي كمثال :
 كود
HttpWebRequest hwr = (HttpWebRequest)WebRequest.Create("http://www.amazon.com");
hwr.CookieContainer = new CookieContainer();
وذلك قبل ال HTTP Request ثم نسنده إليه كما يلي :

 كود
HttpWebResponse hwrsp = (HttpWebResponse)hwr.GetResponse();
hwrsp.Cookies = hwr.CookieContainer.GetCookies(hwr.RequestUri);


6- Headers : لمعرفة ال HTTP Headers
7- LastModified : يرجع فيه وقت وتاريخ أخر تعديل
8- Method : لمعرفة الميثود والتي تستخدم في ال HTTP Response
9 – ProtocolVersion : لمعرفة ال HTTP Version
10 – ResponseUri : ال URL الخاص بسيرفر
11 – Server : لمعرفة اسم السيرفر
12 – StatusCode : لمعرفة نوع ال Coding امستخدم
13 – StatusDescription : لإرجاع Text يحتوي على حالة ال HTTP


في الدرس القادم سوف نتحدث عن الProgramming Web Services & XML إنشاء الله ..
لتحميل كافة الدروس انظر التوقيع

لتحميل هذا الدرس على شكل PDF File :





الملفات المرفقة
 L7 HTTP Programming.rar ( 132.82ك ) عدد مرات التنزيل: 835
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالأربعاء,22/شوال/1426 هـ,12:55 مساءً
المشاركة #23

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

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

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



لتحميل السبعة دروس السابقة على شكل PDF File :




الملفات المرفقة
 C# Network Programming Chapter1(0.8).pdf ( 593ك ) عدد مرات التنزيل: 1112
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالسبت,25/شوال/1426 هـ,09:16 مساءً
المشاركة #24

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

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

المجموعة: المشرفين القدامى
المشاركات: 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)



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

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

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

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



اشكرك اخي محمد , ونحن بلإنتظار
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالثلاثاء,06/ذو القعدة/1426 هـ,08:46 مساءً
المشاركة #26

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

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

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



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

الدرس الثامن: Web Services Programming
تحدثنا في الدرس السابق عن برمجة ال HTTP وبينا فيه كيفية التفاعل بين ال web server وال client ويعتبر هذا الدرس مكمل لما تحدثنا عنه سابقا, تتلخص وظيفة استخدام ال web services بإمكانية الاستفادة من ال Methods الموجودة بال web server داخل برنامج الزبون وباستخدام برتوكول ال SOAP وهو اختصار ل Simple Object Access Protocol يتم نقل ال Result من ال web Services server إلى ال Client بعد تحويلها إلى ال XML - extensible Markup Language حيث تنقل عبر برتوكول ال HTTP إلى جهاز الزبون والهدف من استخدامه هو تسهيل وصول ال Data من ال web server إلى ال Client من خلال ال firewalls والبيئات المختلفة إذ أن جميع بيئات الشبكات تدعم برتوكول ال HTTP والذي يعمل على البورت 80 . ولا تختلف لغة ال XML عن ال HTML إذ تستخدم نفس القواعد في ال HTML وهي مجموعة من الElements وال Attributes مثل ال </> <> لكن تتميز بمرونة اكبر وكمثال عليها :

 كود
<myStuff>
<myName>FADI Abdel-qader</myName>
<myTelephone>+962796...</myTelephone>
<myEmail>fadi822000@yahoo.com</myEmail>
<myAge>23</myAge>
<mySex>M</mySex>
</myStuff>


ويتم استدعائها في الدوت نيت باستخدام النيم سبيسس System.xml حيث يتم قراءتها باستخدام الميثود Load الموجود في ال XmlDocument Class كما يلي :

 كود
using System.Xml;
// Then you can Read any XML File as Below:
XmlDocument xDoc = new XmlDocument();
xDoc.Load(@"C:\myinfo.xml");
XmlNodeList name = xDoc.GetElementsByTagName("myName");
XmlNodeList telephone = xDoc.GetElementsByTagName("myTelephone");
XmlNodeList email = xDoc.GetElementsByTagName("myEmail");
XmlNodeList age = xDoc.GetElementsByTagName("myAge");
XmlNodeList sex = xDoc.GetElementsByTagName("mySex");

MessageBox.Show(
"Name: " + name[0].InnerText +"\n"+
"Telephone: " + telephone[0].InnerText +"\n"+
"Email: "+ email[0].InnerText +"\n"+
"Age: "+ age[0].InnerText +"\n"+
"sex: "+ sex[0].InnerText +"\n"



تمر عملية استخدام ال web services بثلاثة مراحل وهي :
1- The web service server : والذي يتم من خلاله إرسال واستقبال البيانات عبر برتوكول ال SOAP باستخدام ال IIS وال ASP.NET .
2- The proxy object : والذي يسمح لل Client بإرسال و استقبال البيانات من وإلى ال web Services Server حيث يتم تعريفه في ال HttpWebRequest من خلال الكلاس WebProxy وهو ما بينته في الدرس السابق.
3- The client application : وهو الواجهة الخاصة بزبون والتي يتم ربطها بال Web Services Server
انظر إلى الشكل التالي :



ولإنشاء web services server نقوم بعمل مشروعWeb Services ASP.NET جديد ونستدعي النيم سبيسس System.Web.Services ثم نقوم بتوريث الكلاس WebService للكلاس الرئيسي للمشروع وكما يلي كمثال:

 كود
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;

[WebService(Namespace = http://my_url.com/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
{
public Service () {}
[WebMethod]
public int Add(int a, int b)
{
return a + b;
}

}
حيث يتم استقبال قيمتين A و B وبعد ذلك يقوم بإرجاع ناتج جمع القيمة الأولى مع القيمة الثانية إلى ال Client على شكلXML باستخدام برتوكول ال SOAP وكما يظهر في الشكل التالي :




ولإنشاء برنامج ال Client يجب أولا تحويل الكلاس السابق إلى Dll File و إرفاقه بال Client Resources ويتم استخدامه كما يلي :

 كود
using System;
class Client_side
{
public static void Main(string[] argv)
{
My_main_class mm = new My_main_class();
int x = Convert.ToInt16(argv[0]);
int y = Convert.ToInt16(argv[1]);
int sum = mm.Add(x, y);
Console.WriteLine(sum);
}
}


قد بينت هنا الأساسيات في برمجة ال web Services وسيتم الخوض في التفاصيل لاحقا إن شاء الله .. سوف نتحدث في الدرس القادم عن برمجة ال FTP Programming ..

لتحميل كافة الدروس انظر التوقيع

لتحميل الدرس الأخير :


الملفات المرفقة
 Web Services.pdf ( 138.82ك ) عدد مرات التنزيل: 849
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالأحد,11/ذو القعدة/1426 هـ,12:29 صباحاً
المشاركة #27

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

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

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



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

الدرس التاسع FTP – File Transfer Protocol Programming :

سوف نبدأ هنا بشرح برتوكول أخر من برتوكولات ال Application Layer وهو برتوكول ال FTP والذي يستخدم بشكل أساسي في عملية تنزيل downloading و رفع uploading الملفات من و إلى ال FTP Server وكالعادة في اغلب برمجيات الشبكات و التي تعتمد على وجود Client/Server حيث يقوم السيرفر بتصنت على البورت المخصص لل FTP وهو البورت 21 باستخدام ال TCP Connection Oriented Protocolحيث يبقى السيرفر بوضع الانتظار لورود طلب من ال Client بإنشاء Session معه وبعد إجراء عمليات التحقق Authentication والتأكد من الصلاحيات يتم الموافقة على البدء بالجلسة حيث يتم تحديد رقم البورت والذي سوف يتم استقبال البيانات من خلاله ويتم الإرسال إلى جهاز الزبون عبر البورت 20 في السيرفر وتتضح هذه العملية كما في الشكل التالي :



لتفعيل خدمة ال FTP لديك بحيث يعمل جهازك ك FTP Server يجب أولا التأكد من أن ال FTP Services مثبتة لديك مع ال IIS و كما يظهر في الشكل التالي :



ومن ثم التأكد من تفعيلها ب Services من Control Panel ثم Administrative Tools ثم Services وكما يظهر في الشكل التالي :



ثم التأكد منه في ال IIS بحيث يظهر كما في الشكل التالي :



أولا : FTP Commands
تشبه عملية الاتصال و الاستخدام لل FTP عملية ال Telnet إلى حد كبير حيث يدعم برتوكول ال FTP مجموعة من الأوامر والتي يتم من خلالها عملية التخاطب مع السيرفر أو مع ال Remote Host وتضح هذه العملية كما في الشكل التالي :



وهنا شرح لأهم ال Commands FTP:



ثانيا : التعامل مع ال FTP في الدوت نيت باستخدام COM Components :
تدعم الدوت نيت استخدام ال FTP عبر ITC – Internet Transfer Control وهو جزء من ال COM Components Controls وللبدء قم بإنشاء New Windows Application كما في الشكل التالي :



ثم قم بإضافة النيم سبيسس التالية :

 كود
using System.IO;
using System.Reflection;


ثم إضافة الكود التالي إلى ال Upload Button :
 كود

private void button1_Click(object sender, System.EventArgs e)
{
FileInfo thisFile = new FileInfo(tbFile.Text);
Type ITC;
object[] parameter= new object[2];
object ITCObject;
ITC = Type.GetTypeFromProgID("InetCtls.Inet");
ITCObject = Activator.CreateInstance(ITC);
parameter[0] = (string)tbServer.Text;
parameter[1] = (string)"PUT " + thisFile.FullName + " /" + thisFile.Name;
ITC.InvokeMember("execute", BindingFlags.InvokeMethod,null, ITCObject, parameter);
}

تم في البداية تعريف ال ITC من خلال ال Type Class والموجود ضمن النيم سبيس System.Reflection ثم عرفنا Array من النوع Object وذلك لاستخدامها في تمرير اسم الملف و ال FTP Server إلى الميثود InvokeMember والموجودة ضمن ال ITC Control Object ...
سوف تجد الملف الذي سيتم رفعه في المجلد :
C:\Inetpub\ftproot

ثالثا : التعامل مع ال FTP في الدوت نيت باستخدام ال Web Class :
يمكن برمجة ال FTP باستخدام web Class والموجودة ضمن النيم سبيسس System.Net وتشبه عملية التعامل معه كما في التعامل مع الWebRequest و ال webResponse Classes و التي تعاملنا معها في برمجة ال HTTP حيث يمكننا الاستفادة منها لتعامل مع ال FTP Protocol وهي كما يلي :

- WebClient إذ تم دعم dot net Framework 2 استخدام الكلاس WebClient والذي يدعم التعامل مع ال FTP والذي يتم استدعائه من النيم سبيسس System.Net ويتم تعريفه كما يلي :

 كود
using System;
using System.Net;

namespace Web_Client
{
class Program
{
public static void Main(string[] args)
{
string filename = "ftp://ms.com/files/dotnetfx.exe";
WebClient client = new WebClient();
client.DownloadFile(filename, "dotnetfx.exe");

}

}
}


- FtpRequestCreator ويستخدم لتسجيل وبدأ العمل مع ال FTP ويعرف كما يلي :
 كود

using System;
using System.Net;

namespace FTP
{
public class FtpRequestCreator : IWebRequestCreate
{
public FtpRequestCreator()
{
}

public System.Net.WebRequest Create(System.Uri uri)
{
return new FtpWebRequest(uri);
}
}
}


- FtpWebRequest ويستخدم لعمل download or upload a file on an FTP server ويتم تعريفها كما يلي :
 كود

using System;
using System.Net;

namespace FTP
{
public class FtpWebRequest : WebRequest
{
private string username = "Fadi";
internal string password = "fff";
private Uri uri;
private bool binaryMode = true;
private string method = "GET";

internal FtpWebRequest(Uri uri)
{
this.uri = uri;
}

public string Username
{
get { return username; }
set { username = value; }
}

public string Password
{
set { password = value; }
}

public bool BinaryMode
{
get { return binaryMode; }
set { binaryMode = value; }
}

public override System.Uri RequestUri
{
get { return uri; }
}

public override string Method
{
get { return method; }
set { method = value; }
}

public override System.Net.WebResponse GetResponse()
{
FtpWebResponse response = new FtpWebResponse(this);
return response;
}
}
}


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

using System;
using System.IO;
using System.Net;
using System.Net.Sockets;

namespace FTP
{
public class FtpWebResponse : WebResponse
{
private FtpWebRequest request;
private FtpClient client;

internal FtpWebResponse(FtpWebRequest request)
{
this.request = request;
}
}
}


- FtpWebStream ويستخدم لتعريف ال Stream والذي سوف يستخدم لعملية النقل ويعرف بشكل مبدئي كما يلي :
 كود

using System;
using System.IO;
using System.Net.Sockets;

namespace FTP
{
internal class FtpWebStream : Stream
{
private FtpWebResponse response;
private NetworkStream dataStream;

public FtpWebStream(NetworkStream dataStream, FtpWebResponse response)
{
this.dataStream = dataStream;
this.response = response;
}
}
}


رابعا : مثال تطبيقي لرفع ملف من جهاز Client إلى جهاز Server باستخدام ال Stream وال Socket:

في هذا الجزء سوف نقوم بإنشاء برنامجين Client / Server وبتعامل مع ال Stream Library سوف نقوم بتحويل الملف إلى Byte Array و إرساله عبر ال Stream باستخدام ال Socket و TCP Connection , ولبرمجة الجزء الخاص بالإرسال أو ال Client قم بإنشاء مشروع جديد كما في الشكل التالي :



سوف نستخدم النيم سبيسس التالية :

 كود
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;

في ال Send Button قم بكتابة الكود التالي :
 كود
try
{
Stream fileStream = File.OpenRead(textBox1.Text);
// Alocate memory space for the file
byte[] fileBuffer = new byte[fileStream.Length];
fileStream.Read(fileBuffer, 0, (int)fileStream.Length);
// Open a TCP Connection and send the data
TcpClient clientSocket = new TcpClient(textBox2.Text,8880);
NetworkStream networkStream = clientSocket.GetStream();
networkStream.Write(fileBuffer,0,fileBuffer.GetLength(0));
networkStream.Close();
}
catch (Exception ex){MessageBox.Show(ex.Message);}



قمنا في البداية بقراءة الملف الذي نود إرساله وتخزينه ب Stream Object وحتى نستطيع إرساله عبر ال Socket لابد من تحويله إلى مصفوفة من النوع Byte وقمنا بتسميته ب fileBuffer ثم تعبئته باستخدام الميثود Read والموجودة ضمن fileStream وبعد ذلك قمنا بإنشاء اتصال مع ال Server باستخدام ال TCP Connection حيث تم إرسال محتويات ال fileBuffer إلى ال Server باستخدام NetworkStream Class ...

ولبرمجة جزء Server وهو المسئول عن استقبال الملف وتخزينه قم بإنشاء مشروع جديد كما يظهر في الشكل التالي :



سوف نستخدم النيم سبيسس التالية :

 كود
using System.Threading;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.IO;


ثم قم بكتابة ميثود جديدة وليكن اسمها handlerThreadوكما يلي :
 كود

public void handlerThread()
{
Socket handlerSocket = (Socket)alSockets[alSockets.Count-1];
NetworkStream networkStream = new
NetworkStream(handlerSocket);
int thisRead=0;
int blockSize=1024;
Byte[] dataByte = new Byte[blockSize];
lock(this)
{
// Only one process can access
// the same file at any given time
Stream fileStream = File.OpenWrite(@"c:\upload");

while(true)
{
thisRead=networkStream.Read(dataByte,0,blockSize);
fileStream.Write(dataByte,0,thisRead);
if (thisRead==0) break;
fileStream.Close();
}
lbConnections.Items.Add("File Written");
handlerSocket = null;
}

ثم قم بكتابة ميثود أخرى جديدة وذلك لفتح TCP Connection على البورت 8880 وهو افتراضي والتصنت عليها وليكن اسمها listenerThreadوكما يلي :
 كود

public void listenerThread()
{
TcpListener tcpListener = new TcpListener(8880);
tcpListener.Start();
while(true)
{
Socket handlerSocket = tcpListener.AcceptSocket();
if (handlerSocket.Connected)
{
lbConnections.Items.Add(handlerSocket.RemoteEndPoint.ToString() + " connected.");
lock (this)
{
alSockets.Add(handlerSocket);
}
ThreadStart thdstHandler = new
ThreadStart(handlerThread);
Thread thdHandler = new Thread(thdstHandler);
thdHandler.Start();
}
}
}

ثم قم بإضافة الكود التالي إلى حدث بدأ تشغيل البرنامج Form Load :
 كود

private void Form1_Load(object sender, System.EventArgs e)
{
IPHostEntry IPHost = Dns.GetHostByName(Dns.GetHostName());

lbConnections.Text = "My IP address is " +
IPHost.AddressList[0].ToString();

alSockets = new ArrayList();

Thread thdListener = new Thread(new ThreadStart(listenerThread));
thdListener.Start();

}


باستخدام ال Thread تم تنفيذ ال listenerThread Method والتي قمنا فيها بتعريف ال tcpListener وتفعيله على البورت 8880 حيث سيتم قبول أي طلب يأتي من ال Client على هذا البورت وبعد ذلك استدعاء الميثود handlerThread والتي سيتم فيها استقبال ال Stream Data وتخزينها في Byte Array ثم قراءتها وتخزينها في المكان المحدد وباستخدام ال fileStream.Write حيث مررنا له ال Stream والذي يحتوي على اسم الملف thisRead وال dataByte Array...



الملفات المرفقة
 FTP Programming + Examples.rar ( 366.18ك ) عدد مرات التنزيل: 706
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالأحد,11/ذو القعدة/1426 هـ,12:35 صباحاً
المشاركة #28

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

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

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



وهنا قد تم الانتهاء من ال Chapter1 وفي الجزء التالي من هذه السلسلة سوف نتحدث عن أمور أكثر تقدما في برمجة الشبكات وسوف نأتي على بعض الجزيئيان ونفصلها بشكل اكبر إنشاء الله مثل :

Stream Libraries
Network Layer Programming
Remotting
Threading and the Asynchronous Pattern
Security & Authentications


لتحميل Chapter1 : تسعة دروس




الملفات المرفقة
 C# Network Programming Chapter1.rar ( 652.43ك ) عدد مرات التنزيل: 1218
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالثلاثاء,13/ذو القعدة/1426 هـ,04:56 صباحاً
المشاركة #29

الرتبة في المنتدى:ملازم

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

المجموعة: أعضاء فعالين
المشاركات: 198
سجل في:الثلاثاء,15/ذو الحجة/1425 هـ,02:35 مساءً
الدولة:اليمن
رقم العضوية: 1329



أخي فادي تسلم على هذة الدروس المميزة جدا وجزاك الله ألف خير .
ونحن في إنتظار المزيد .


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

الحماس خطوة هامة على الطريق، ولكن التقدم الحقيقي هو نتيجه لتصرف صحيح وبشكل ثابت
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالجمعة,16/ذو القعدة/1426 هـ,11:07 مساءً
المشاركة #30

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

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

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



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

الدرس العاشر: Managed I/O: Streams, Readers, and Writers :

تحدثنا سابقا في الجزء الأول بشكل عام عن استخدامات ال Streams Library واستخدامها لإرسال Binary Data و Text Data من جهاز إلى آخر وكمثال قمنا بإرسال صورة من ال Client إلى ال Server باستخدام ال Stream Reader & Stream Writer ..
إن الهدف من إنشاء مكتبات ال Stream هو تسهيل عملية نقل البيانات من مكان إلى أخر سواء عبر الشبكة أو داخل نفس الجهاز كما هو الحال بتعامل مع الملفات أو التعامل مع الطابعة أو أي طرفية أو جهاز آخر موصول بالكمبيوتر حيث تسهل علينا عملية تحويلها إلى Byte Array وإرسالها وهو ما حل الكثير من المشاكل التي كانت تواجه المبرمجين في التعامل مع Binary Data ..
يمكن التعامل مع ال Stream بأسلوبين المتزامن Synchronous والغير متزامن Asynchronous وبشكل افتراضي تعمل جميع ال IO Streams بالأسلوب المتزامن لاكن العيب فيه هو تأثيره الشديد على أدائية النظام إذ يقوم بإغلاق الProcessing Unit في ال Thread المخصصة للبرنامج بحيث لا يسمح بتنفيذ أي أمر آخر إلا بعد الانتهاء من العملية الجارية ولا ينصح ابدآ استخدام الأسلوب المتزامن في حالة إذا كنت تتعامل مع أجهزة قراءة وكتابة بطيئة نسبيا مثل ال Floppy Disk أو ال Magnetic Tape لكنها مهمة جدا بالبرمجيات التي تعتمد على أنظمة الزمن الحقيقي أو ال Real Time Systems حيث أنها تعتمد الأسلوب المتزامن في عملية إرسال واستقبال البيانات وهو ما يمنع القيام بأي عملية أخرى إلى حين الانتهاء من تنفيذ الأمر ومن الأمثلة عليها أنظمة السحب أو الإيداع في الرصيد البنكي أو أنظمة حجز التذاكر أو شحن بطاقة الهاتف وغيرها .. طبعا في حالة إذا كان برنامجك لا يحتاج إلى وجود الخواص السابقة عندها ينصح باستخدام الأسلوب الغير متزامن Asynchronous حيث تستطيع من خلاله تنفيذ عمليات أخرى في وحدة المعالجة وبدون الحاجة لانتظار إنهاء العملية الجارية إذ يتم إنشاء Separate thread لكل عملية طلب إدخال أو إخراج مما لا يؤثر على أدائية النظام وينصح باستخدامه إذا كانت عملية القراءة أو الكتابة تجرى من خلال أجهزة بطيئة نسبيا ويمكن تميز الميثود المتزامن عن الغير متزامن في الدوت نيت بوجود كلمة Begin أو End في بداية اسم الميثود الغير متزامن وكمثال عليها BeginWrite و BeginRead و ال EndWrite و ال EndRead ..

أولا: Stream Classes

تدعم الدوت نيت عمليات ال Streams بمجموعة من ال Classes والمندرجة تحت النيم سبيسس System.object و System.IO والتي تستخدم لعمليات نقل البيانات ال Binary Data . تستخدم بعض ال Stream Classes , Backing storage , ومن الأمثلة عليها FileStream و ال BufferedStream وال MemoryStream وكذلك فإن بعضها لا يستخدم أي Back Storage ومن الأمثلة عليها ال NetworkStream والتي تستخدم لنقل ال Stream عبر الشبكة وبدون استخدام Backing Storage , و تقسم ال Stream Classes في الدوت نيت كما في الشكل التالي :




1- BufferedStream Class : ويستخدم بشكل أساسي لحجز مقدار معين من الذاكرة بشكل مؤقت لتنفيذ عملية معينة كما تستخدم بعض البرمجيات ال Buffering لتحسين الأدائية حيت تكون كذاكرة وسيطة بين المعالجة و الإرسال أو الاستقبال وكمثال عليها برمجيات الطباعة حيث تستخدم الطابعة ذاكرة وسيطة لتخزين البيانات المراد طباعتها بشكل مؤقت , يكمن الهدف الأساسي من استخدام ال Buffering في العمليات التي يكون فيها المعالج أسرع من عمليات الإدخال و الإخراج حيث يتم معالجة البيانات ووضعها في ال Buffer في انتظار إرسالها وهو ما يساهم في تحسين الأدائية بشكل كبير , ويستخدم ال BufferedStream عادتا في برمجيات الشبكات مع ال NetworkStream لتخزين البيانات المراد إرسالها عبر الشبكة في الذاكرة حيث لا يستخدم هذا الكلاس Backing storage كما ذكرنا سابقا ..

بشكل افتراضي يتم حجز 4096 bytes عند استخدام ال BufferedStream ويمكن زيادتها أو تقليلها حسب الحاجة .. ويستخدم ال BufferedStream كما يلي كمثال :
 كود

using System;
using System.Text;
using System.IO;
namespace Network_Buffering
{
class Program
{
static void Main(string[] args)
{
ASCIIEncoding asen = new ASCIIEncoding();
byte[] xx = asen.GetBytes("Hello Buffering");

MemoryStream ms = new MemoryStream(xx);
readBufStream(ms);
}
public static void readBufStream(Stream st)
{
// Compose BufferedStream
BufferedStream bf = new BufferedStream(st);
byte[] inData = new Byte[st.Length];

// Read and display buffered data
bf.Read(inData, 0, Convert.ToInt32(st.Length));
Console.WriteLine(Encoding.ASCII.GetString(inData));
}
}
}


حيث قمنا بتحويل نص إلى Byte Array باستخدام ال ASCIIEncodingوتحميله في عبر ال MemoryStream ثم ارسلناه إلى الميثود readBufStream والتي انشأناها حيث استقبلنا من خلالها ال Stream وحملناه في ذاكرة مؤقتة بستخدام الكلاس ال BufferedStream ثم قمنا بطباعة محتوياته بعد تحويله إلى نص مرة اخرى بستخدام الEncoding.ASCII وطباعته ..

2- MemoryStream Class : وهو شبيه بعملية ال Buffring السابقة إذ يعتبر كحل جيد لتخزين البيانات بشكل مؤقت في الذاكرة قبل الإرسال أو الأستقبال حيث يغنيك عن تخزينها على شكل ملف مما يسرع العملية بشكل كبير ويستخدم كما يلي كمثال حيث استخدمنها لتخزين صورة في الذاكرة :
 كود

MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);

byte[] arrImage = ms.GetBuffer();
ms.Close();


3- NetworkStream Class : وكما قمنا باستخدامها سابقا , حيث تقوم بتعامل مع ال Stream لإرساله عبر الشبكة باستخدام ال Socket ويتم استدعائها من النيم سبيسس System.Net.Sockets ويعتبر الكلاسNetworkStream بأنه unbuffered إذ لا يحتوي على Backing Storage ويفضل استخدام ال BufferedStream Classمعه لتحسين الأداء وتستخدم كما يلي كمثال حيث نريد إرسال الصورة التي قمنا بتخزينها في المثال السابق بذاكرة إلى جهاز أخر عبر ال Socket :
 كود

TcpClient myclient = new TcpClient (“localhost”,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 ();


4- FileStream : يتم استدعائها باستخدام النيم سبيسس System.IO وتستخدم بشكل اساسي في التعامل مع الملفات سواء للكتابة إلى ملف أو القراءة من ملف وتعتبر هذه الكلاس Backing Storage Class حيث تستخدم ذاكرة Buffer لتحزين البيانات بشكل مؤقت في الذاكرة لحين الإنتهاء من عملية الكتابة أو القراءة ومن الأمور الهامة فيها تحديد مسار الملف المراد القراءة منه أو الكتابة عليه وتستخدم كما يلي :

 كود
FileStream FS = new FileStream(@"C:\MyStream.txt",
FileMode.CreateNew);// Any Action For Example CreateNew to Create Folder


يمكننا استخدام ال Enumeration التالية مع ال FileMode :



1- Append لإضافة نص ما إلى الملف الموجود اصلا
2- Create لإنشاء ملف جديد ويقوم بعمل overwriting في حالى إذا كان الملف موجود بشكل مسبق
3- CreateNew وهو كما في ال Create إلا انه يعطي Exception في حالة وجود الملف بشكل مسبق
4- Open لقراءة ملف ما حيث يعطي Excption في حالة عدم وجود الملف المحدد
5- OpenOrCreate في حالة إذا وجد الملف يقوم بقراءته وفي حالة عدم وجوده يقوم بإنشائه.
6- Truncate ويستخدم لحذف محتويات الملف وجعله فارغا

ثانيا : Stream Members :
هنالك مجموعة من الخواصو و المييثودس التي تشترك بها مكتبات ال Stream وهي كما يلي :




1- CanRead و CanWrite وتستخدم لمعرفة إذا كان ال Stream المستخدم يقبل عملية القراءة أو الكتابة أم لا حيث ترجع قيمة True في حالة إذا كان يقبل و False في حالة أنه لا يقبل ويستخدم عادة قبل إجراء عملية القراءة أو الكتابة لفحص مدى الصلاحية قبل المحاولة ..
2- CanSeek حيث يستخدم ال Seeking عادة لتحديد موقع ال Current Stream والعادة تدعم الكلاسات التي تستخدم Backing Storage هذه العملية مثل ال FileStream وعندها ترجع قيمة True وترجع قيمة false في حالة إذا كان ال Stream Class لا يحتوي على Backing Storage .
3- CanTimeout وترجع قيمة True في حالة إذا كان ال stream يحتوي على خاصية ال Timeout والتي تعطي وقت محدد للعملية .
4- Length وتستخدم لمعرفة حجم ال Stream بال Byte ويمكن الاستفادة منها لمعرفة نهاية ال Stream أو لتحديد حجم المصفوفة بناء على حجم ال Stream .
5- Position وتستخدم ال Get و Set لمعرفة أو تحديد الموقع ل Stream
وتشترك مكتبات ال Stream بمجموعة من الميثودس وهي كما يلي :

1-الميثودس المتزامنة Synchronous Methods :

I. Read و ReadByte وتستخدم لقراءة Stream Data وتخزينه في ال Buffer ويمكن تحديد عدد البايتات التي سيتم قراءتها باستخدام ال ReadByte كما نستطيع من خلالها معرفة نهاية ال Stream حيث ترجع ال Read قيمة 0 وال ReadByte قيمة -1 في حالة انتهاء ال Stream.
II. Write وال WriteByte وتستخدم لعملية الإرسال عبر ال Stream ويمكن تحديد عدد البايتات التي سيتم كتابتها في كل مرة باستخدام ال WriteByte.


2-الميثودس غير المتزامنة Asynchronous Methods :

I. BeginRead وال BeginWrite وتستخدم لعملية القراءة أو الكتابة باستخدام ال Stream الغير المتزامن وتأخذ خمسة باروميترات كما في الشكل التالي :




1- ال Byte Buffer والتي سوف تستخدم لعملية القراءة منه أو الكتابة عليه
2- ال offset والذي سوف يحدد فيه موقع القراءة أو الكتابة
3- ال numByte والذي سوف يتم فيه تحديد الحد الأقصى من البايتات التي سيتم كتابتها أو قراءتها
4- ال AsyncCallback وهو Optional Delegate حيث يتم استدعائه عند الانتهاء من عملية القراءة أو الكتابة
5- ال Stateobject وهي User Provided Object وتستخدم لتميز ال Read & Write Request عن غيره ال Requests .
ترجع ال Begin Methods ال IAsyncResult والذي يمثل حالة ال Stream Operation .

II. EndRead وال EndWrite وتستخدم في حالة إذا أردنا تنفيذ ال Stream Operation بعد الانتهاء من ال Stream Operation الحالي, حيث يبقى بانتظار انتهاء العملية السابقة ثم ينفذ العملية المطلوبة

وهناك بعض الميثود والتي تستخدم لإدارة ال Stream وهي :

1- Flush وتستخدم لتفريغ محتويات ال Buffer بعد إتمام العملية المحددة حيث يتم نقل محتويات ال Buffer إلى ال Destination الذي تم تحديده في Stream Object.

2- Close وتستخدم لإغلاق ال Stream وتحرير ال Resources المحجوزة من قبل ال Stream Object وينصح باستخدامها في الجزء الخاص ب Finally block ولتأكد من أن ال Stream سيتم إغلاقه وتحرير كافة الموارد في حالة حدوث أي Exception إثناء التنفيذ ولضمان عدم بقاء هذه الموارد في الذاكرة بعد إغلاق البرنامج.

3- SetLength وتستخدم لتحديد حجم ال Stream والذي نريد إرساله أو استقباله لاكن في حالة إذا كان ال Stream أقل من المحدد في ال SetLength سوف يؤدي ذالك إلى انقطاع ال Stream وعدم وصوله بشكل سليم , لن تستطيع استخدام هذه الخاصية إلا إذا تأكدت انك تملك الصلاحية لذلك من خلال الخاصية CanWrite و CanSeek لذا ينصح بفحص الصلاحية أولا قبل تحديد حجم ال Stream .

ثالثا : Stream Manipulation:

يمكن استخدام مكتبات ال Stream لنقل Binary Data أو Text وفي العادة يتم استخدام ال BinaryReader و ال BinaryWriter لتعامل مع ال Binary Data ويتم استخدام ال StreamReader وال StreamWriter لتعامل مع ال Text ,
ويتم استخدام ال ASCIIEncoding أو UnicodeEncoding لتحويل من Stream إلى Text عند الاستقبال ومن Text إلى Stream عند الإرسال حيث تستخدم مجموعة من الميثودس وهي كما في الشكل التالي :




1- GetByteCount وهي Overloaded Method حيث تأخذ Character Array أو String وترجع عدد البايتات التي سوف نحتاجها لنقل نص معين ..
2- GetBytes لتحويل ال String إلى Byte Array حتى نستطيع إرسالها باستخدام ال Stream .
3- GetCharCount حيث تأخذ Byte Array وترجع عدد الأحرف التي سوف تكون في ال String أو في ال Character Array .
4- GetChars وتستخدم لتحويل من Byte Array إلى String وتستخدم عند استقبال البيانات من ال Stream حيث نحولها إلى نص مرة أخرى .

ولتعامل مع ال StreamReader و ال StreamWriter لنقل Text يجب أولا استدعائها من ال System.IO نيم سبيسس وتستخدم كما يلي:

StreamReader للقراءة من ملف:

 كود
StreamReader str = File.OpenText(openFileDialog1.FileName);
textBox1.Text = str.ReadToEnd();


StreamWriter للكتابة إلى ملف:

 كود
string fname = saveFileDialog1.FileName;
StreamWriter fsave = new StreamWriter(fname);
fsave.WriteLine(textBox1.Text);


و لتعامل مع ال BinaryReader وال BinaryWriter لنقل Binary Data يتم استدعائها من ال System.IO نيم سبيسس وتستخدم كما يلي:

BinaryReader لقراءة Binary Data من ال Stream:

 كود
NetworkStream myns = new NetworkStream(mysocket);
BinaryReader br = new BinaryReader(myns);


BinaryWriterr لإرسال BinaryData إلى ال Stream عبر ال Socket:

 كود
TcpClient myclient = new TcpClient("localhost", 5020);
NetworkStream myns = myclient.GetStream();
BinaryWriter mysw = new BinaryWriter(myns);
mysw.Write(arrImage);


Remote Control Example باستخدام ال Stream Reader & Writer:

مثال تطبيقي بسيط سوف نستخدم فيه برنامج شبيه ب Chatting لاكن سوف نستخدمه لإعطاء أوامر إلى ال Server حيث يفترض إذا قمنا بإرسال كلمة notepad إلى ال server بأن يقوم بفتح ال notepad فيه وإذا قمنا مثلا بكتابة Calc وإرسالها إلى السيرفر سوف يفتح الآلة الحاسبة فيه وهكذا :

أولا : إنشاء برنامج الإرسال Client : لا يختلف برنامج الإرسال عن برنامج ال Client Chat الذي قمنا بإنشائه في ال Chapter1 ويستخدم فيه كل من TCP Connection وال NetworkStream و ال StreamWriter لإجراء عملية الإرسال فباستخدام الميثود WriteLine الموجودة ضمن ال StreamWriter Object تتم عملية تحويل النص المكتوب في ال Textbox إلى مجموعة من ال Bytes ليتم إرسالها باستخدام ال NetworkStream عبر ال TCP Socket Connection إلى برنامج السيرفر وللبدء قم بإنشاء مشروع جديد كما في الشكل التالي :



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

في Send Button قم بكتابة الكود التالي:
 كود
try
{
TcpClient myclient = new TcpClient (txt_host.Text,5020); // تعريف السوكت
NetworkStream myns = myclient.GetStream (); // إسناده إلى اللستريم اوبجكت
StreamWriter mysw = new StreamWriter (myns);
mysw.WriteLine(txt_msg.Text);

mysw.Close ();
myns.Close ();
myclient.Close ();
}
catch (Exception ex) {MessageBox.Show (ex.Message );}


ولإنشاء برنامج ال Server والذي يعمل على استقبال ال Stream وتحويله إلى Text مرة أخرى .. قم بإنشاء مشروع جديد كما في الشكل التالي :



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

ثم إضافة التعاريف التالية :
 كود
TcpListener mytcpl;// Objects Declaration
Socket mysocket;
NetworkStream myns;
StreamReader mysr;


ثم نقوم بإنشاء ميثود جديدة كما يلي :

 كود
void our_Server ()
{
mytcpl = new TcpListener (5020);// 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
string order = mysr.ReadLine();

// you can add any order and Response Here
if (order=="notepad") System.Diagnostics.Process.Start("notepad");
else if (order=="calc") System.Diagnostics.Process.Start("calc");
else MessageBox.Show("Sorry Sir Your Request is not in my hand",order);

mytcpl.Stop();// Close TCP Session

if (mysocket.Connected ==true)// Looping While Connected to Receive Another Message
{
while (true)
{
our_Server ();// Back to First Method
}
}
}


حيث تقوم هذه الميثود بتصنت على ال Socket في حالة ورود أي Request يقوم بالموافقة عليه وإنشاء Session جديدة معه وفي حالة ورود أي بيانات عبر السوكت يتسلمها باستخدام ال StreamReader ويحولها إلى Text ثم نقوم بفحص الرسالة باستخدام الجمل الشرطية فمثلا إذا كانت الرسالة هي notepad يتم استدعائها باستخدام الميثود Start الموجودة ضمن الكلاس Process والموجودة في النيم سبيسس System.Diagnostics...
ولتشغيلها ضمن Thread جديد لابد من وضع تعريف الثريد في حدث بدأ التشغيل للفورم كما يلي :
 كود

private void Form1_Load(object sender, System.EventArgs e)
{
Thread myth;
myth= new Thread (new System.Threading .ThreadStart(our_Server));
myth.Start ();
}


ثم قم بإضافة التالي في حدث ال Form Closing وذلك لتأكد من إغلاق السوكت وال Stream في البرنامج ..

 كود

private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
try
{
mytcpl.Stop ();
Application.ExitThread ();
Application.Exit();
}
catch (Exception ex) {MessageBox .Show (ex.Message );}



وهنا قد تم الانتهاء من شرح ال Stream وال Stream Class في الدرس القادم سوف نتحدث عن ال Network Layer Programming والتي سوف نتطرق فيها إلى أمور اكثر تقدما في برمجة TCP وال UDP ..




الملفات المرفقة
 (L10) Streams.pdf ( 224.17ك ) عدد مرات التنزيل: 853
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة

    

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

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



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

Powered By arabmoheet v3.1

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