الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

نقل الملفات (إرسال و استقبال) بين جهازين عل

بدأه djug في 30 مايو 2009 · 7 رد · 3,847 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

كتابة برنامج java لنقل الملفات (إرسال و استقبال) بين جهازين على شبكة محلية

كنت أبحث الأسبوع الماضي عن طريقة لإرسال ملفات من جهاز إلى آخر عن طريق الشبكة المحلية فوجدت كودا أعجبني لسهولته أدخلت عليه بعض التعديلات ليصبح على الشكل التالي

import java.net.*;

 import java.io.*;



public class FileServer   {

 public static void main (String [] args )   throws IOException {

 // create socket

 ServerSocket servsock = new ServerSocket(4007);

 String requestedFile=null;

 Socket sock;

 ObjectInputStream ois=null;

 while (true)   {

 System.out.println(”Waiting   on “+servsock.getLocalPort()+”…”);



sock =   servsock.accept();

 System.out.println(”Accepted   connection : ” + sock);



requestedFile=”";



// receive the request

 ois = new   ObjectInputStream(sock.getInputStream());

 try {



requestedFile   = (String) ois.readObject();

 } catch   (ClassNotFoundException e) {



e.printStackTrace();



}

 System.out.println(”the   requested file is   “+ requestedFile);



// sendfile



File myFile = new   File (requestedFile);

 byte []   mybytearray  = new byte   [(int)myFile.length()];

 FileInputStream fis =   new FileInputStream(myFile);

 BufferedInputStream   bis = new BufferedInputStream(fis);

 bis.read(mybytearray,0,mybytearray.length);

 OutputStream os =   sock.getOutputStream();

 System.out.println(”Sending…”);

 os.write(mybytearray,0,mybytearray.length);

 os.flush();

 sock.close();

 }

 }

 }

الـ Server يقوم بإنشاء socket (في هذا المثال الـ socket حامل الرقم 4007) و ينتظر الطلبات عليه

يجب أن يكون الملف المطلوب موجودا (البرنامج هذا لا يدرس إمكانية عدم وجود الملف)

أما الـ client

import java.net.*;

 import java.io.*;



public class FileClient{

 public   static void main (String [] args ) throws IOException {

 int   filesize=6022386; // filesize temporary hardcoded



long start   = System.currentTimeMillis();

 int   bytesRead;

 int   current = 0;

 //   localhost for testing

 Socket   sock = new Socket(”192.168.20.2″,4007);

 System.out.println(”Connecting…”);



// Request   the file



ObjectOutputStream oos= new   ObjectOutputStream(sock.getOutputStream());



oos.writeObject(”c:\\documents\\DocName.pdf”);

 oos.flush();



// receive   file

 byte []   mybytearray  = new byte [filesize];

 InputStream is = sock.getInputStream();

 FileOutputStream fos = new FileOutputStream(”e:\\copy.pdf”);

 BufferedOutputStream bos = new BufferedOutputStream(fos);

 bytesRead   = is.read(mybytearray,0,mybytearray.length);

 current =   bytesRead;



do {

 bytesRead =

 is.read(mybytearray,   current, (mybytearray.length-current));

 if(bytesRead >= 0) current += bytesRead;

 }   while(bytesRead > -1);



bos.write(mybytearray, 0 , current);

 bos.flush();

 long end =   System.currentTimeMillis();

 System.out.println(end-start);



bos.close();



sock.close();

 }

 }

يقوم بالاتصال بالـ server الموجود على الجهاز صاحب الـ Ip 192.168.20.2 على الـ socket 4007

يرسل مسار الملف الذي يود تحميله

c:\\documents\\DocName.pdf

و يضعه بعد التحميل في

e:\\copy.pdf

الملفان المصدريان في المرفقات

FilerRceive_FileServer.rar

#2

بارك الله فيك على هذا المجهود ,,, وجزيت خيرا.

#3

هل هناك مشكلة أخ djug

أم أن الشيفرة تعمل وأحببت مشاركتنا إياها

(اسأل لسببين لو كنت تريد مساعدة أساعد لو كانت الشيفرة تعمل أن أضيفها إلى المواضيع المميزة)

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#4
اقتباس
هل هناك مشكلة أخ djug

أم أن الشيفرة تعمل وأحببت مشاركتنا إياها

(اسأل لسببين لو كنت تريد مساعدة أساعد لو كانت الشيفرة تعمل أن أضيفها إلى المواضيع المميزة)

تحياتي

الشفرة تعمل جيداً و أردت مشاركتها مع الجميع

#5

مشكووووووووور حبيبي djug وفعلاً موضوع مميز

بس أخي لوكان الملف حجمه كبير مثلاً حجمه فوق ال100 م.ب , كيف تتم تجزئته وإرساله على شكل دفعات واستقباله من قبل الكلاينت كذلك على شكل دفعات ومن ثم كتابته على شكل ملف واحد؟

وجزاك الله خير :)


HeartOutputStream myHeart;
OutputStream myHeartOutStream;

myHeartOutStream = MAllaw.getHeart().getOutputStream();
myHeart = new HeartOutputStream(myHeartOutStream);

while(myHeart.isStillBeating())
myHeart.write("I ♥ Java");

#6

ولم تريد تجزئته ؟

#7

عندي سؤال بخصوص هذا الموضوع

بخصوص port

لو فرضا عندي عدد من Object على السيرفر وابغى اخلي لكل واحد منهم port خاص فيه بحيث انه مثلا اذا العميل سوا طلب وارسل رقم port السيرفر يعرف اي Object هو المطلوب ويقوم بعمليات عليه

كيف انشئ port لكل object انشئه في السيرفر بحيث مستقبلا اذا استخدمت Socket اخلي رقم port متغير وهو الرقم القادم من العميل وامرر نفس الرقم للسيرفر عشان يطلع لي Object المطلوب

تم تعديل هذه المشاركة بواسطة Kmarwani في 31 أكتوبر 2009 في 12:10

#8

بارك الله فيك اخي الكريم djug على هذا الجهد المبارك

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

بارك الله فيك مرة اخرى اخي

مواضيع مشابهة