التعامل مع الشبكات فى الجافا Java Networking
منتدى مصر التقني :: قسم لغات البرمجة Programming languages :: لغة الجافا Java :: التعامل مع الشبكات Java Networking
صفحة 1 من اصل 1 • شاطر
التعامل مع الشبكات فى الجافا Java Networking
بسم الله الرحمن الرحيم
الاخوة الاعزاء اهلا وسهلا بكم ......فى هذا الدرس التعليمى إن شاء الله تعالى سنتعلم سويا كيفية التعامل مع الشبكات فى الجافا ....حيث تمكنك الجافا من الاتصال بالشبكات سواء من خلال بروتوكول TCP / IP أو من بروتوكول UDP وسيتم شرح كل طريقه من خلال هذا الدرس
اولا : الاتصال بالشبكات من خلال بروتوكول TCP / IP
يعتبر بروتوكول TCP/IP من أهم البروتوكولات الموجوده من أجل التخاطب في الشبكات و يعتبر الان لغة التخاطب الوحيده في الانترنت و يوجد العديد من لغات التخاطب ما بين القطع و المعدات في الشبكه الواحده و لكن الـ TCP/IP يعتبر البروتوكول الرئيسي و بذلك لغة التخاطب هذه هي اللغه الافضل و الأكثر شيوعاً في العالم ..
وطريقة الاتصال من خلال هذا البروتوكول بأن يقوم العميل بطلب اتصال مع الخادم ...ثم يبدأ العميل عملية الاتصال مع الخادم ...ثم يقوم بعد ذلك بغلق عملية الاتصال كما فى المخطط التالى :

أ_ أستخدام الفئة java.net.Socket لفتح اتصال مع الملقم
عندما نريد فتح اتصال ما بين الخادم و العميل من خلال بروتوكول TCP / IP فأننا نستخدم فى ذلك الفئة Socket و التى يتم تمير اليها عنوان IP ومنفذ TCP للاتصال وذلك عن طريق الخطوات التالية :
1_ من اجل الاتصال بمقلم على الانترنت عن طريق بروتوكول TCP / IP يجب اولا اتسيراد المكتبة اللازمة وذلك باستخدام الكود التالى :
- الكود:
import java.net.Socket;
2_ نقوم بعد ذلك بخلق كائن جديد من Socket ثم نقوم بتمرير رقم الاى بى للخادم المطلوب الاتصال به على الشبكة من خلال المنفذ 80 و ذلك بأستخدام الكود التالى :
- الكود:
Socket socket = new Socket("78.46.84.171", 80);
كما يمكنك استخدام اسم النطاق بدلا من رقم الاى بى الخاص بالخادم المراد الاتصال به وذلك على النحو التالى :
- الكود:
Socket socket = new Socket("forumegypt.net", 80);
3_ الكتابة الى العميل ....الاكواد السابقة هى لمجرد فتح اتصال بالمقلم فقط ....لكن ماذا اذا اردنا الكتابة الى المقلم ؟....لنستطيع فعل ذلك سوف نستخدم الكائن OutputStream و هو احد الكائنات الخاصة بالفئة JAVA.IO و ذلك على النحو التالى :
- الكود:
Socket socket = new Socket("forumegypt.net", 80);
OutputStream out = socket.getOutputStream();
out.write("some data".getBytes());
out.flush();
out.close();
socket.close();
4_ القراءة من الملقم ...لكى تستطيع القراءة من الملقم يجب استخدام الكائن InputStream و ذلك على النحو التالى :
- الكود:
Socket socket = new Socket("orumegypt.net , 80);
InputStream in = socket.getInputStream();
int data = in.read();
//... read more data...
in.close();
socket.close();
ب _ أستخدام الفئة java.net.ServerSocket لتشغيل الخادم
إذا كنا نرغب في تشغيل الخادم الذي يستمع للاتصالات الواردة من العميل على منفذ TCP..فعلينا استخدام الفئة ServerSocket و ذلك على النحو التالى :
1_ استيراد المكتبة اللازمة و ذلك من خلال الكود التالى :
- الكود:
import java.net.ServerSocket;
2_ نقوم بعد ذلك بخلق كائن جديد من ServerSocket و الذى سيقوم بالاستماع للاتصال الوارد من خلال المنفذ 9000 و ذلك بأستخدام الكود التالى :
- الكود:
ServerSocket serverSocket = new ServerSocket(9000);
3_ من أجل قبول الاتصالات الواردة يجب استدعاء الاسلوب ServerSocket.accept و ذلك من خلال الكود التالى :
- الكود:
ServerSocket serverSocket = new ServerSocket(9000);
boolean isStopped = false;
while(!isStopped){
Socket clientSocket = serverSocket.accept();
//do something with clientSocket
}
4_ إغلاق منفذ العميل ....وذلك من خلال الكود التالى :
- الكود:
socket.close();
5_ إغلاق منفذ الخادم من خلال الكود التالى :
- الكود:
serverSocket.close();
ج _ أستخدام الفئتين URL + URLConnection لاتصال خوادم الويب (ملقمات HTTP) :
حزمة java.net تحتوي على فئتين مثيرة للاهتمام هما .....الفئة URL و الفئة URLConnection وهذه الفئات يمكن استخدامها لإنشاء اتصالات بخوادم الويب (ملقمات HTTP). هنا مثال بسيط:
- الكود:
URL url = new URL("http://jenkov.com");
URLConnection urlConnection = url.openConnection();
InputStream input = urlConnection.getInputStream();
int data = input.read();
while(data != -1){
System.out.print((char) data);
data = input.read();
}
input.close();
كما ترون فى المثال أعلاه قمنا بالاتصال بخادم ويب و استطعنا أن نقرأ البيانات منه حيث URLConnection يرسل طلب GET إلى خادم الويب HTTP .....أما إذا كنت ترغب في إرسال طلب POST الى خادم HTTP نقوم بأستدعاء الاسلوب URLConnection.setDoOutput(true) مثل هذا:
- الكود:
URL url = new URL("http://jenkov.com");
URLConnection urlConnection = url.openConnection();
urlConnection.setDoOutput(true);
و بمجرد تعين الاسلوب setDoOutput تساوى true يمكنك بسهولة الكتابة الى الخادم بأستخدام الطريقة OutputStream كما فى المثال التالى :
- الكود:
OutputStream output = urlConnection.getOutputStream();
وهكذا بأستخدام OutputStream يمكنك كتابة أي البيانات التي تريدها الى خوادم HTTP. تذكر أن تقوم بإغلاق OutputStream عند الانتهاء كتابة البيانات إليه
د_ الاتصال بالملفات المحلية local file system
الفئة URL يمكنك استخدامها ايضا للوصول إلى الملفات في نظام الملفات المحلية.و بالتالى فانها وسيلة في متناول اليد لفتح ملف معين وذلك من خلال الكود التالى :
- الكود:
URL url = new URL("file:/c:/data/test.txt");
URLConnection urlConnection = url.openConnection();
InputStream input = urlConnection.getInputStream();
int data = input.read();
while(data != -1){
System.out.print((char) data);
data = input.read();
}
input.close();
وكما ترى فى ألكود أعلاه ....لاحظ أن الفرق الوحيد من الوصول إلى ملف على خادم الويب HTTP هو عنوان URL أما عبر الملفات المحلية نتسخدم المسار "file:/c:/data/test.txt"
هـ _ أستخدام الفئة JarURLConnection للاتصال بملف jar عبر الويب .
الفئة JarURLConnection يستخدم للاتصال إلى ملف jar. مرة واحدة و يمكنك الحصول على معلومات حول محتويات الملف jar و هنا مثال بسيط
- الكود:
String urlString = "http://butterfly.jenkov.com/"
+ "container/download/"
+ "jenkov-butterfly-container-2.9.9-beta.jar";
URL jarUrl = new URL(urlString);
JarURLConnection connection = new JarURLConnection(jarUrl);
Manifest manifest = connection.getManifest();
JarFile jarFile = connection.getJarFile();
//do something with Jar file...
...
ثانيا : الاتصال بالشبكات من خلال بروتوكول UDP
بروتوكول UDP هو أختصار للجملة الانجليزية User Datagram Protoco هو بروتوكول يسمح بتناقل البيانات مثل TCP مع بعض الاختلافات الجوهرية من حيث طريقة التوصيل والتأكد من صحة المعلومات وسرعة التوصيل واحتمال الضياع. ....ففى طريقة التوصيل مثلا يقسم هذا ال بروتوكول البيانات المراد إرسالها إلى وحدات تسمى كل وحدة (datagram) ومن هنا يأتي الاختلاف مع TCP حيث يوضع مع كل وحدة عنوان المرسل إلية وليس مثل TCP الذي يقوم بفتح اتصال مباشر مع الطرف الاخر ثم يرسل البيانات, حيث أنه هنا كل وحدة مستقلة في طريقها عن باقي الوحدات فربما كل وحدة تسلك طريقاَ أخر عن غيرها وثم يقوم الطرف الاخر بتجميعها ......ويتم فتح اتصال مع الشبكات عبر هذا البروتوكول من خلال الفئات التالية :
1_ أستخدام الفئة DatagramSocket لارسال البيانات .
لإرسال البيانات عبر بروتوكول UDP باستخدام الفئة DatagramSocket يجب عليك أولا إنشاء DatagramPacket .....وذلك من خلال الكود التالى :
- الكود:
byte[] buffer = new byte[65508];
InetAddress address = InetAddress.getByName("jenkov.com");
DatagramPacket packet = new DatagramPacket(
buffer, buffer.length, address, 80);
وكما ترون أعلاه .... قمنا فى السطر الاول بإنشاء المخزن المؤقت بايت (صفيف البايت) لتخزين البيانات التي سيتم إرسالها في مخطط بيانات UDP. طول المخزن المؤقت أعلاه، 65508 بايت، هو الحد الأقصى لمقدار البيانات التي يمكن إرسالها في حزمة واحدة عبر بروتوكول UDP
و فى السطر الثانى أستخدمنا الفئة InetAddress لانشاء كائن جديد يحتوي على عنوان الويب (مثل الخادم) لإرسال حزمة البيانات الى UDP . و InetAddress فئة يمثل عنوان IP (عنوان إنترنت). و getByName() الأسلوب بإرجاع InetAddress مثيل مع عنوان IP مطابقة اسم المضيف معين.
لإرسال DatagramPacket يجب إنشاء DatagramSocket تستهدف إرسال البيانات. وذلك كما يلى :
- الكود:
DatagramSocket datagramSocket = new DatagramSocket();
ثم نقوم بعد ذلك بارسال البيانات من خلال استدعاء الاسلوب send كما فى الكود التالى :
- الكود:
datagramSocket.send(packet);
و بالتالى فاإن الكود بالكامل لارسال البيانات عبر بروتوكول UDP سيكون على النحو التالى :
- الكود:
atagramSocket datagramSocket = new DatagramSocket();
byte[] buffer = "0123456789".getBytes();
InetAddress receiverAddress = InetAddress.getLocalHost();
DatagramPacket packet = new DatagramPacket(
buffer, buffer.length, receiverAddress, 80);
datagramSocket.send(packet);
2_ أستخدام الفئة DatagramSocket لاستقبال البيانات .
استقبال البيانات عبر DatagramSocket يتم ذلك عن طريق إنشاء DatagramPacket ثم تلقي البيانات الى DatagramSocket من خلال الاسلوب receive وفيما يلي مثال:
- الكود:
DatagramSocket datagramSocket = new DatagramSocket(80);
byte[] buffer = new byte[10];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
datagramSocket.receive(packet);
وبعد ذلك يمكنك الحصول على المخزن المؤقت من خلال الكود التالى :
- الكود:
byte[] buffer = packet.getData();
والى هنا نكون قد انتهيا من هذا الدرس الى اللقاء ان شاء الله تعالى فى درس جديد 

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
رد: التعامل مع الشبكات فى الجافا Java Networking
شرح رائع ....مشكور يا اخى الكريم
ذوكا- .....
- تاريخ التسجيل : 26/05/2013
المساهمات : 92
النقاط : 156
التقيم : 12
الدولة :
الجنس :
sar
رائع شكرا لك
ibrahim sar- .
- تاريخ التسجيل : 04/05/2017
المساهمات : 1
النقاط : 1
التقيم : 0
الدولة :
الجنس :
رد: التعامل مع الشبكات فى الجافا Java Networking
سيف كتب:يوجد كتاب عملي او اي مصدر عملي يوضح آلية ربط من الناحيه العمليه واكواد يين الخادم والزبون وارسال باللغة الجافا وياريت اتكون Gui
طريقة
Network
sockets
Tcp
ضروري جدا
اهلا بيك أخى الكريم
ابدء اولا بالمشروع و سوف نساعدك كلما تعثرت فى شىء ....لكن البداية عليك ؟
ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
رد: التعامل مع الشبكات فى الجافا Java Networking
بارك الله فيك ...
انا عملت تطبيق بالجافا ناتبينز و MYSQL واريد مشاركة هذا التطبيق مع العديد من الاجهزة حيث يكون جهازي عبارة عن server وبه قاعدة البيانات
اريد منكم مساعدة وشكرا
انا عملت تطبيق بالجافا ناتبينز و MYSQL واريد مشاركة هذا التطبيق مع العديد من الاجهزة حيث يكون جهازي عبارة عن server وبه قاعدة البيانات
اريد منكم مساعدة وشكرا
mergac- .
- تاريخ التسجيل : 03/11/2019
المساهمات : 7
النقاط : 8
التقيم : 1
الدولة :
الجنس :
رد: التعامل مع الشبكات فى الجافا Java Networking
فيزا مستثمر في دبي – الشروط والأوراق والتكلفة
تأسيس شركة خاصة في دبي
تأسيس شركة أوفشور offshore في دبي
تأسيس شركة خاصة في دبي
تأسيس شركة أوفشور offshore في دبي
| |
منتدى مصر التقني :: قسم لغات البرمجة Programming languages :: لغة الجافا Java :: التعامل مع الشبكات Java Networking
صفحة 1 من اصل 1
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى
» معدات التعدين المفتوحة ، أنظمة الحزام الناقل وحلول مناولة المواد السائبة
» نماذج الاعمال business model والعروض الاستثمارية PitchDeck
» طرق تكبير الثدي للعزباء
» "أحلامنا المرآة: فك رموزها واستكشاف عمق المعاني"
» "لحام خزانات الفايبر بجودة عالية: توفير حلول دائمة وموثوقة للتخزين"
» "خدمات مكافحة النحل والدبابير: التعامل مع الحشرات القاحلة بأمان وفعالية"
» "خدمات تنظيف الفلل والمنازل الكبيرة في السعودية: الراحة والفخامة في بيئة نظيفة"
» مستقبل التكنولوجيا
» ATM Management System Project in Java