كتابة برنامج 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
الملفان المصدريان في المرفقات

