Professional Documents
Culture Documents
مقدمة ›
مصطلحات أساسية في عالم الشبكات ›
الكالسات التي نحتاجها للتعامل مع الشبكات ›
مقدمة
في اللغة اإلنجليزية ,الفكرة األساسية من الشبكات هي ربط األجهزة على إختالف أنواعها مع بعض لخلق نوع من Networkشبكة تعني
التواصل فيما بينهم .فمثالً األجهزة الموصولة على الشبكة سواء كانت كمبيوترات أو هواتف أو سيرفرات ,يمكنها مشاركة البيانات مع بعضها
.البعض بواسطة برامج معيّنة
Network شبكة Programming خالل من آخر برنامج مع بياناته يشارك برنامج كتابة .تعني
العادي المستخدم عند مثبت برنامج و السيرفر على مثبّت برنامج يكون العادة .في
.الفكرة هنا بناء برامج للمستخدمين تجعلهم قادرين على التواصل مع بعضهم و مشاركة البيانات فيما بينهم
.عندما نقول مشاركة البيانات من خالل شبكة ,نقصد بذلك أن الكمبيوتر سيشارك بياناته مع كمبيوتر آخر
).يمكن أن يكون كال الكمبيوترات موجودين على نفس الشبكة و يمكن أن يكون كل كمبيوتر منهم في بلد مختلف ( ال يهم
التي تحتوي على مجموعة ضخمة من الكالسات و java.netلبناء برامج يمكنها مشاركة البيانات مع بعضها عبر الشبكات ,نستخدم الحزمة
.اإلنترفيسات المص ّممة خصيصيا ً لمشاركة البيانات عبر الشبكات
متصفّح ,حيث يمكنك بناء متصفح مثل .Opera Mini,Internet Explorer ,Google Chrome ,Mozilla FireFox
ألعاب ,حيث أنه يمكنك بناء لعبة يستطيع فيها الالعبين تحد ّي بعضهم عن بعد.
برنامج إختبار ,فمثالً ,يمكنك بناء برنامج يجعل الطالب قادرا ً على إجراء أي إمتحان عن بعد و إرساله إلى مركز المؤسسة التعليمية الرئيسية عند
اإلنتهاء إلخ..
MAC Addressإختصار لـ ,Media Access Control Addressو هو عبارة عن رقم كرت الشبكة الخاصة بالجهاز.
الـ MAC Addressيتألف من ,12 bytesكل byteفيهم يمكن أن يكون رقم بين 0و ,9أو حرف بين Aو .F
MAC
أمثلة
Address
00:1C:B3:09:85:15
00:B0:D0:86:BB:F7
00:1B:44:11:3A:B7
IP Addressإختصار لـ ,Internet Protocol Addressو هو عبارة عن عنوان مؤقت يتم إعطائه ألي جهاز يريد
اإلتصال بالشبكة.
الـ IP Addressيتألف من أربعة أرقام ,كل رقم فيهم يمكن أن يكون بين 0و .255
IP
أمثلة Address
80.10.5.104
192.168.0.1
210.14.92.65
في العربية أيضا ً نقول بروتوكول ,و هو عبارة عن مجموعة قواعد أساسية يجب إتباعها في كل عملية تواصل.
في عالم الشبكات يوجد بروتوكوالت كثيرة ,كل واحد منهم مصمم لغرض معيّن.
أشهر البروتوكوالت
TCPيستخدم عند نقل بيانات على الشبكة ,يضمن وصولها إلى الجهة المطلوبة كما هي تماماً.
Protocol
UDPيستخدم عند نقل بيانات على الشبكة ,ال يهمه إذا فقد جزء من البيانات التي ت ّم إرسالها.
POP 3يستخدم من قبل العميل إلستقبال الرسائل إلكترونية الواردة في بريده مع إمكانية حذفها.
كل برنامج يرسل أو يستقبل بيانات على الشبكة يحتاج أن يفتح بورت خاص فيه على الجهاز. Port
رقم البورت يتيح للمستخدم إستخدام أكثر من برنامج يتعاملون مع الشبكة في نفس الوقت. Number
إذا ً رقم البورت يميّز البرامج التي تستخدم الشبكة عن بعضها البعض.
إختصار لـ ,Uniform Resource Locatorو يعني كل المعلومات المذكورة في الرابط و التي تشير إلى مصدر محدد
للبيانات.
protocol .1نضع مكانها إسم البروتوكول المستخدم في عملية اإلتصال مثل .http
port .4نضع مكانها بورت البرنامج أو البروتوكول المستخدم من قبل العميل ,فمثالً الـ httpيستخدم البورت .80
path .5نضع مكانها إسم المجلد الذي نريد الدخول إليه على السيرفر.
filename .6نضع مكانها إسم الملف الذي نريد تصفحه أو تحميله إلخ..
مالحظة عندما تتصفّح أي موقع في النت ,حتى لو لم ترا جميع المعلومات التي ذكرناها لك عن الـ ,URLتأكد أن المتصفح
يكتبها عنك.
أمثلة
المتصفح )
الـ Socketعبارة عن مجموعة الكالسات التي يمكن إستخدامها إلنشاء برامج تجعل المستخدمين قادرين على التواصل فيما
بينهم بشكل متزامن عبر شبكة النت .و هي تض ّمن المعلومات األساسية التي نحتاجها إلجراء أي عملية إتصال:
مثال Socket
في حال أردنا إرسال بيانات على الشبكة إلى شخص محدّد ,علينا تحديد المعلومات التالية:
خالصة
الـ خالل من الشبكة على جهاز ألي الوصول IPيمكن فيه Address .الخاص
.و كل تطبيق يتعامل مع الشبكات سواء إلرسال أو إستقبال بيانات يحتاج إلى رقم بورت خاص فيه ليميّزه عن باقي البرامج التي تستخدم الشبكة
URLالكالس
.هذا الكالس مص ّمم بشكل عام لتجهيز روابط الملفات التي سنتعامل معها عن بعد عبر شبكة اإلنترنت
» تابع القراءة URLلمزيد من التفاصيل حول الكالس
URLConnectionالكالس
باإلضافة إلى أنّه يمكنّنا من URL,و هو يستخدم للقراءة و الكتابة في الملف الذي يشير له كائن الـ Abstract Class,هذا الكالس عبارة عن
الملف مع اإلتصال بإجراء المتعلقة المعلومات كافة تحديد و .معرفة
مرة تم فيها تحديث الملف ,تاريخ صالحيّة الملف ,إسم الكالس المناسب إلرسال المعلومات منه و استقبالها فيه إلخ
ّ آخر معرفة لنا يتيح ً ال فمث ..
» تابع القراءة URLلمزيد من التفاصيل حول الكالس
InetAddressالكالس
.هذا الكالس مص ّمم لتحليل عنوان الجهاز أو الموقع الذي نحاول اإلتصال به عن بعد عبر شبكة النت
» تابع القراءة InetAddressلمزيد من التفاصيل حول الكالس
Socketكالسات الـ
عبارة عن مجموعة من الكالسات التي يمكن إستخدامها إلنشاء برامج تجعل المستخدمين قادرين على التواصل فيما بينهم بشكل Socketالـ
java.net.متزامن عبر شبكة النت ,لذلك تعتبر أهم كالسات موجودة في الحزمة
:تنقسم لقسمين أساسييّن Socketكالسات الـ
صصة لبناء برامج تستخدم البروتوكول ,UDPمثل الكالسات DatagramSocketو .DatagramPacket .1كالسات مخ ّ
صصة لبناء برامج تستخدم البروتوكول ,TCPمثل الكالسات Socketو .ServerSocket .2كالسات مخ ّ
ServerSocket.و Socketفي هذا الدرس سنشرح الكالسات
لمزيد من التفاصيل
إختصارات
مقدمة ›
URLكونستركتورات الكالس ›
URLدوال الكالس ›
أمثلة شاملة ›
مقدمة
و هي تعني كل المعلومات المذكورة في الرابط و التي تشير إلى مصدر محدد Uniform Resource Locatorإختصار لـ URLالكلمة
.للبيانات
.مص ّمم بشكل عام لتجهيز روابط الملفات التي سنتعامل معها عن بعد عبر شبكة اإلنترنت URLالكالس
بنائه
public final class URL
extends Object
implements Serializable
protocol://host:port/path/filename
protocolنضع مكانها إسم البروتوكول المستخدم في عملية اإلتصال مثل .http
portنضع مكانها بورت البرنامج ( أو البروتوكول ) المستخدم من قبل العميل ,فمثالً الـ httpيستخدم البورت .80
pathنضع مكانها إسم المجلد الذي نريد الدخول إليه على السيرفر مثل مجلّد java
filenameنضع مكانها إسم الملف الذي نريد تصفحه أو تحميله إلخ ..مثل الملف lesson_1.html
.إذا قمنا بتركيب جميع المعلومات المتفرقة الذتي ذكرناها ,سنحصل على رابط واحد و هو رابط الدرس األول في دروس جافا
مثال
http://harmash.com:80/java/lesson_1.html
URLكونستركتورات الكالس
.فأنت تنشئ كائن يمثّل رابط URLبشكل عام عندما تنشئ كائن نوعه
URL.الجدول التالي يحتوي على بعض الكونستركتورات الموجودين في الكالس
الكونستركتور مع تعريفه
نمرره له.
throws MalformedURLExceptionينشئ كائن نوعه URLمن خالل النص الذي ّ
1
النص الذي نقوم بإدخاله يمث ّل كافة المعلومات التي تشك ّل رابط.
في حال وجود أي خطأ في المعلومات المدخلة فيه يتم رمي اإلستثناء .MalformedURLException
throws MalformedURLExceptionينشئ كائن نوعه URLمع تحديد البروتوكول +إسم الموقع +رقم البورت +إسم الملف
2
الذي سيتم الوصول إليه من خالله.
في حال وجود أي خطأ في المعلومات المدخلة فيه يتم رمي اإلستثناء .MalformedURLException
throws MalformedURLExceptionينشئ كائن نوعه URLمع تحديد البروتوكول +إسم الموقع +إسم الملف الذي سيتم
في حال وجود أي خطأ في المعلومات المدخلة فيه يتم رمي اإلستثناء .MalformedURLException
URLدوال الكالس
URL.الجدول التالي يحتوي على دوال الكالس
الدالة مع تعريفها
)(public String getHostترجع نصّ يمث ّل البروتوكول +إسم الموقع الموضوعين في كائن الـ .URL 1
)(public String getAuthorityترجع نصّ يمث ّل البروتوكول +إسم الموقع +رقم البورت (في حال كان مذكور في الرابط)
2
الموضوعين في كائن الـ .URL
)(public String getProtocolترجع إسم البروتوكول الذي يستخدمه كائن الـ URLلإلتصال بالشبكة. 3
)(public int getPortترجع رقم البورت الخاص بالبروتوكول الذي يستخدمه كائن الـ URLلإلتصال بالشبكة.
4
ترجع -1في حال عدم تحديد رقم البورت.
)(public int getDefaultPortترجع رقم البورت اإلفتراضي للبروتوكول الذي يستخدمه كائن الـ URLلإلتصال بالشبكة.
5
ترجع -1في حال عدم وجود رقم بورت إفتراصي.
)(public String getPathترجع نص يمثّل مسار الملف المراد الوصول إليه عن طريق كائن الـ .URL
6
ترجع نصّ فارغ في حال كان مسار الملف غير محدّد.
)(public String getFileترجع نصّ يمثل مسار الملف المراد الوصول إليه عن طريق كائن الـ + URLالـ ( Queryفي حال كان
في حال عدم وجود Queryفي الرابط ,تعطي نفس نتيجة الدالة )(.getPath
ترجع نصّ فارغ في حال كان المسار غير محدّد في الرابط.
Anchorتعني عنصر محدّد موجود في صفحة الويب ,و يقال له مرجع الصفحة.
لتحديد الـ Anchorفي كائن الـ ,URLيجب وضعه بعد إسم الملف ( الذي شير إلى صفحة محددة في الويب ) و نضع الرمز #قبله.
9
مثال
هذا الرابط يفتح الصفحة الرابعة في المجلّد الذي يحتوي على دروس جافا و يضعك مباشرة ً في الفقرة الثانية.
article_2#http://harmash.com/java/lesson_4.html
)(public String getUserInfoترجع معلومات المستخدم الموضوعة في كائن الـ URLفي حال كانت ظاهرة فيه.
ترجع nullفي حال كان ال يوجد أي معلومة خاصة بالمستخدم في كائن الـ .URL
أمثلة
hamash.com@info//:http 10
هذا رابط يحتوي على إيميل شخص من موقع ,harmash.comإذا ً الدالة هنا ترجع .info
hamash.com@info:1234//:http
هذا رابط يحتوي على إيميل و كلمة مرور شخص من موقع ,harmash.comإذا ً الدالة هنا ترجع .info:123
مجرد أمثلة ,كملة المرور يجب عدم إظهارها أبدا ً في الرابط حتى ال يتم سرقة الحساب.
ّ مالحظة هذه
)(public String toStringترجع محتوى كائن URLكنص واحد نوعه .String 12
)public boolean equals(Object objتقارن كائن الـ URLالذي قام باستدعائها مع الكائن الذي نم ّرره لها كـ .Argument
)public boolean sameFile(URL otherURLتقارن كائن الـ URLالذي قام باستدعائها مع كائن الـ URLالذي نمرره لها
كـ .Argument
14
إذا ً تقارن الرابط الذي قام باستدعائها مع الرابط الذي ّ
نمرره لها كـ .Argument
throws IOExceptionتنشئ إتصال مباشر بين البرنامج و الملف الموجود في الموقع الذي يشير له كائن الـ .URL
15
في حال نجح اإلتصال ,ترجع كائن نوعه InputStreamيتيح لك قراءة محتوى هذا الملف فقط.
throws IOExceptionتنشئ إتصال مباشر بين البرنامج و الملف الموجود في الموقع الذي يشير له كائن الـ .URL 16
في حال نجح اإلتصال ,ترجع كائن نوعه URLConnectionيتيح لك قراءة محتوى هذا الملف أو الكتابة فيه.
في حال فشل اإلتصال يت ّم رمي إستثناء.
throws IOExceptionتنشئ إتصال بين البرنامج و الملف الموجود في الموقع الذي يشير له كائن الـ URLعن طريق Proxy
.Server
إذا ً هنا يوجد طرف ثالث يلعب دور الوسيط بين البرنامج الذي يحاول الوصول للملف و الموقع الذي يملك الملف.
في حال نجح اإلتصال ,ترجع كائن نوعه URLConnectionيتيح لك قراءة محتوى هذا الملف أو الكتابة فيه.
في حال كان البروتوكول المستخدم ال يعمل مع ,Proxy Serverيتم تجاهل Proxy Serverو يت ّم وصل طرفي اإلتصال مباشرة ً مع
17
بعضهما.
في حال وضعت الثابت Proxy.NO_PROXYكـ ,Argumentأيضا ً يتم تجاهل Proxy Serverو يت ّم وصل طرفي اإلتصال
مباشرة ً مع بعضهما.
في حال حدث خطأ بسبب الملف يت ّم رمي اإلستثناء .IOException
في حال كان المستخدم ال يملك صالحية إلستخدام الـ ,Proxy Serverيت ّم رمي اإلستثناء .SecurityException
رمي يت ّم صحيح, Proxyبشكل الـ Server نحدد لم وضعنا nullكـ Argumentأو حال في
اإلستثناء .IllegalArgumentException
أمثلة شاملة
المثال األول
يشير إلى رابط درس معيّن من موقعنا ,ثم حاولنا عرض كافة المعلومات التي يمكن استخراجها URLفي المثال التالي قمنا بتعريف كائن نوعه
.من الرابط
أن أي معلومة حاولنا مالحظة تع ّمدنا عرض جميع المعلومات التي يمكن استخراجها من الرابط سواء كانت موجودة أو غير موجودة ,الحظ ّ
.مكانها كما ذكرنا في الجدول السابق -1أو nullعرضها و كانت غير موجودة في الرابط ستوضع القيمة
» شاهد المثال
المثال الثاني
نوعه كائن بتعريف قمنا التالي المثال موقعنا URLفي من معيّن درس رابط إلى .يشير
يتيح لنا قراءة محتوى الملف الذي يشير إليه URLConnectionو التي ترجع كائن نوعه )( openStreamبعدها قمنا باستدعاء الدالة
.الرابط
.حتى نستطيع قراءة محتوى الملف في البرنامج InputStreamقمنا بتخزينه في كائن نوعه URLConnectionكائن الـ
data.إسمه Stringلقراءة محتوى الملف و تخزينه في متغيّر نوعه whileفي األخير قمنا بإنشاء حلقة
ي مالحظة .هنا ستتعلم طريقة قراءة محتوى أي ملف من موقع ما مهما كان نوعه سواء صورة ,فيديو ملف نص ّ
» شاهد المثال
المثال الثالث
.عند قراءة محتوى الملف لتسريع عملية القراءة و بالتالي ألداء أفضل Bufferهذا نفس المثال الثاني من حيث الفكرة .لكننا هنا إستخدمنا الـ
ي من موقع ما مع مراعاة أي نوع ترميز مستخدم في الملف مالحظة .هنا ستتعلم طريقة قراءة محتوى أي ملف نص ّ
يشير إلى رابط درس معيّن من موقعنا ,ثم حاولنا عرض كافة المعلومات التي يمكن استخراجها URLفي المثال التالي قمنا بتعريف كائن نوعه
.من الرابط
أن أي معلومة حاولنا مالحظة تع ّمدنا عرض جميع المعلومات التي يمكن استخراجها من الرابط سواء كانت موجودة أو غير موجودة ,الحظ ّ
.مكانها كما ذكرنا في الجدول السابق -1أو nullعرضها و كانت غير موجودة في الرابط ستوضع القيمة
المثال األول
URLDemo.java
1. package ;url_example_1
2.
3. import ;java.net.URL هنا قمنا باستدعاء الكالس // URL
4.
5. public class URLDemo {
6.
7. public static void main { )(String[] args
8.
9. اآلن سنحاول إجراء إتصال عبر الشبكة للوصول إلى ملف محدد //
10. try
11. {
12. URLإسمه urlيشير إلى رابط الدرس الرابع في جافا الفقرة الثانية //
هنا قمنا بتعريف كائن نوعه
13. URL url
= new ;) "URL( "http://harmash.com:80/java/lesson_4.html#article_2
14.
15. // هنا قمنا بعرض المعلومات المتوفرة و الغير متوفرة في الرابط
16. System. out .println( "URL : " + url.toString());
27. }
28. catch ( Exception e ) {
30. }
31.
32. }
33.
34. }
Protocol : http
Authority : harmash.com:80
Path : /java/lesson_4.html
Port : 80
Default port : 80
Reference : article_2
Query : null
نوعه كائن بتعريف قمنا التالي المثال موقعنا URLفي من معيّن درس رابط إلى .يشير
يتيح لنا قراءة محتوى الملف الذي يشير إليه URLConnectionو التي ترجع كائن نوعه )( openStreamبعدها قمنا باستدعاء الدالة
.الرابط
.حتى نستطيع قراءة محتوى الملف في البرنامج InputStreamقمنا بتخزينه في كائن نوعه URLConnectionكائن الـ
data.إسمه Stringلقراءة محتوى الملف و تخزينه في متغيّر نوعه whileفي األخير قمنا بإنشاء حلقة
المثال الثاني
URLDemo.java
1. package ;url_example_2
2.
3. import ;java.net.URL هنا قمنا باستدعاء الكالس // URL
الكالس
5.
6. public class URLDemo {
7.
8. public static void main { )(String[] args
9.
10. قمنا بتجهيز هذا المتغير من أجل تخزين محتوى الملف فيه //
11. = String data ; ""
12.
13. // اآلن سنحاول إجراء إتصال عبر الشبكة للوصول إلى ملف محدد و قراءة
محتواه
14. try
15. {
16. URLإسمه urlيشير إلى رابط الدرس الرابع في جافا // هنا قمنا بتعريف
كائن نوعه
17. = URL url new ;) "URL( "http://harmash.com/java/lesson_4.html
18.
19. هنا قمنا بتخزين الملف الذي يشير له الكائن URLفي الكائن // is
20. ;)(InputStream is = url.openStream
21.
22. isو تخزنهم في المتغير // data هنا قمنا بإنشاء حلقة تمر على جميع
األحرف الموجودة في الكائن
23. int ;c
25. {
26. data += ( char )c;
27. }
28.
29. // هنا قمنا بإغالق اإلتصال مع الملف
30. is.close();
31.
32. // هنا قمنا بعرض محتوى الملف
33. System. out .println(data);
34. }
35. catch ( Exception e ) {
37. }
38.
39. }
40.
41. }
• عند تشغيل البرنامج سيتم عرض محتوى الملفlesson_4.html و الذي هو عبارة عن كامل كود الصفحة التي يشير لها الرابط.
ّ الحظ
• و حللنا هذه المشكلة في المثال, هذه المشكلة سببها عدم تحديد الترميز المستخدم في القراءة,أن األحرف العربية لم تظهر بشكل صحيح
الثالث.
<!DOCTYPE html>
<html lang="ar">
<head>
<script src='/google_analytics_auto.js'></script></head>
<body>
<div id="header"></div>
<div id="topnavContainer"></div>
<div id="container">
<div id="rightSide"></div>
<div id="content">
URLالمثال الثالث في الكالس
.عند قراءة محتوى الملف لتسريع عملية القراءة و بالتالي ألداء أفضل Bufferهذا نفس المثال الثاني من حيث الفكرة .لكننا هنا إستخدمنا الـ
المثال الثالث
URLDemo.java
1. package ;url_example_3
2.
3. import ;java.net.URL هنا قمنا باستدعاء الكالس // URL
باستدعاء الكالس
5. import ;java.io.InputStream // InputStream هنا قمنا باستدعاء
الكالس
6. import ;java.io.InputStreamReader // InputStreamReader هنا قمنا
باستدعاء الكالس
7.
8. public class URLDemo {
9.
10. public static void main { )(String[] args
11.
12. قمنا بتجهيز هذا المتغير من أجل تخزين محتوى الملف فيه //
13. = String data ; ""
14.
15. // اآلن سنحاول إجراء إتصال عبر الشبكة للوصول إلى ملف محدد و قراءة
محتواه
16. try
17. {
18. URLإسمه urlيشير إلى رابط الدرس الرابع في جافا // هنا قمنا بتعريف
كائن نوعه
19. = URL url new ;) "URL( "http://harmash.com/java/lesson_4.html
20.
21. هنا قمنا بتخزين الملف الذي يشير له الكائن URLفي الكائن // is
22. ;)(InputStream is = url.openStream
23.
24. لحل مشكلة الترميز و وضع محتوى الملف في الـ // Buffer
هنا قمنا بتحويل نوع الكائن isإلى النوع InputStreamReader
25. = InputStreamReader isr new InputStreamReader(is, ;) ""UTF-8
26.
27. الكائن brيتيح لنا قراءة محتوى الملف الموجود في الـ // Buffer
28. = BufferedReader br new ;)BufferedReader(isr
29.
30. brو تخزنهم في المتغير // data هنا قمنا بإنشاء حلقة تمر على جميع
األحرف الموجودة في الكائن
31. int ;c
33. {
34. ;data += ( char )c
35. }
36.
37. هنا قمنا بإغالق اإلتصال مع الملف //
38. ;)(is.close
39. ;)(isr.close
40. ;)(br.close
41.
42. هنا قمنا بعرض محتوى الملف //
43. ;)System. out .println(data
44. }
45. { ) catch ( Exception e
47. }
48.
49. }
50.
51. }
.و الذي هو عبارة عن كامل كود الصفحة التي يشير لها الرابط lesson_4.htmlعند تشغيل البرنامج سيتم عرض محتوى الملف •
><!DOCTYPE html
>"<html lang="ar
><head
<meta http-equiv="expires" content="-1"/>
<script src='/google_analytics_auto.js'></script></head>
<body>
<div id="header"></div>
<div id="topnavContainer"></div>
<div id="container">
<div id="rightSide"></div>
<div id="content">