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

التعامل مع الشبكات فى الجافا Java Networking

اذهب الى الأسفل

التعامل مع الشبكات فى الجافا Java Networking   Empty التعامل مع الشبكات فى الجافا Java Networking

مُساهمة من طرف أحمد مناع الجمعة يونيو 14, 2013 6:43 pm

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

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

اولا : الاتصال بالشبكات من خلال بروتوكول TCP / IP

يعتبر بروتوكول TCP/IP من أهم البروتوكولات الموجوده من أجل التخاطب في الشبكات و يعتبر الان لغة التخاطب الوحيده في الانترنت و يوجد العديد من لغات التخاطب ما بين القطع و المعدات في الشبكه الواحده و لكن الـ TCP/IP يعتبر البروتوكول الرئيسي و بذلك لغة التخاطب هذه هي اللغه الافضل و الأكثر شيوعاً في العالم ..

وطريقة الاتصال من خلال هذا البروتوكول بأن يقوم العميل بطلب اتصال مع الخادم ...ثم يبدأ العميل عملية الاتصال مع الخادم ...ثم يقوم بعد ذلك بغلق عملية الاتصال كما فى المخطط التالى :

التعامل مع الشبكات فى الجافا Java Networking   552852355

 أ_ أستخدام الفئة 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();


والى هنا نكون قد انتهيا من هذا الدرس الى اللقاء ان شاء الله تعالى فى درس جديد Very Happy


ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
أحمد مناع
أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 1108
النقاط : 202034
التقيم : 144
الدولة : مصر
الجنس : ذكر

https://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

التعامل مع الشبكات فى الجافا Java Networking   Empty رد: التعامل مع الشبكات فى الجافا Java Networking

مُساهمة من طرف ذوكا السبت يونيو 15, 2013 11:29 am

شرح رائع ....مشكور يا اخى الكريم
ذوكا
ذوكا
.....
.....

تاريخ التسجيل : 26/05/2013
المساهمات : 92
النقاط : 156
التقيم : 12
الدولة : مصر
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

التعامل مع الشبكات فى الجافا Java Networking   Empty sar

مُساهمة من طرف ibrahim sar الأحد فبراير 11, 2018 10:10 pm

رائع شكرا لك
ibrahim sar
ibrahim sar
.
.

تاريخ التسجيل : 04/05/2017
المساهمات : 1
النقاط : 1
التقيم : 0
الدولة : المغرب
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

التعامل مع الشبكات فى الجافا Java Networking   Empty

مُساهمة من طرف سيف الخميس أبريل 11, 2019 6:14 pm

يوجد كتاب عملي او اي مصدر عملي يوضح آلية ربط من الناحيه العمليه واكواد يين الخادم والزبون وارسال باللغة الجافا وياريت اتكون Gui
طريقة
Network
sockets
Tcp
ضروري جدا
سيف
سيف
.
.

تاريخ التسجيل : 11/04/2019
المساهمات : 1
النقاط : 1
التقيم : 0
الدولة : العراق
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

التعامل مع الشبكات فى الجافا Java Networking   Empty رد: التعامل مع الشبكات فى الجافا Java Networking

مُساهمة من طرف أحمد مناع الجمعة أبريل 12, 2019 12:12 pm

سيف كتب:يوجد كتاب عملي او اي مصدر عملي يوضح آلية ربط  من الناحيه العمليه واكواد يين الخادم والزبون وارسال باللغة الجافا وياريت اتكون Gui
طريقة
Network
 sockets
Tcp
ضروري جدا

اهلا بيك أخى الكريم

ابدء اولا بالمشروع و سوف نساعدك كلما تعثرت فى شىء ....لكن البداية عليك ؟

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
أحمد مناع
أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 1108
النقاط : 202034
التقيم : 144
الدولة : مصر
الجنس : ذكر

https://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

التعامل مع الشبكات فى الجافا Java Networking   Empty رد: التعامل مع الشبكات فى الجافا Java Networking

مُساهمة من طرف mergac الإثنين أغسطس 02, 2021 1:26 pm

بارك الله فيك ...
انا عملت تطبيق بالجافا ناتبينز و MYSQL  واريد مشاركة هذا التطبيق مع العديد من الاجهزة حيث يكون جهازي عبارة عن server وبه قاعدة البيانات 
اريد منكم مساعدة وشكرا
mergac
mergac
.
.

تاريخ التسجيل : 03/11/2019
المساهمات : 7
النقاط : 8
التقيم : 1
الدولة : الجزائر
الجنس : انثى

الرجوع الى أعلى الصفحة اذهب الى الأسفل

كاتب هذه المساهمة مطرود حالياً من المنتدى - معاينة المساهمة

الرجوع الى أعلى الصفحة

ََ

مواضيع ذات صلة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى