Distributed application in java to download various files from various servers using RMI

Aim: To create a distributed application to download various files from various servers using RMI


 Create four files – file interface, file implementation, file client and fileserver

  1. In the file interface, class specify the prototype of the method that is to be implemented in the file implementation class
  2. In the file implementation class, specify the implementation coding for the method defined earlier (download file[])
  3. Try to read the contents of a file in this class
  4. In the fileclient class try to write some contents into a file
  5. In the fileserver class, try to register / bind the methods with the rmiregistry
  6. Compile  all the files and execute as specified to get the desired output.



 import java.rmi.Remote;

import java.rmi.RemoteException;

public interface FileInterface extends Remote {

public byte[] downloadFile(String fileName) throws   RemoteException ; }


import java.io.*;

import java.rmi.*;

import java.rmi.server.UnicastRemoteObject;

public class FileImpl extends UnicastRemoteObject

implements FileInterface {

private String name;

public FileImpl(String s) throws RemoteException{


name = s;   }

public byte[] downloadFile(String fileName){

try {

File file = new File(fileName);

byte buffer[] = new byte[(int)file.length()];

BufferedInputStream input = new

BufferedInputStream(new FileInputStream(fileName));




} catch(Exception e){

System.out.println(“FileImpl: “+e.getMessage());


return(null);      }   }}


import java.io.*;

import java.rmi.*;

public class FileServer {

public static void main(String argv[]) {

try {

FileInterface fi = new FileImpl(“FileServer”);

Naming.rebind(“//”, fi);

} catch(Exception e) {

System.out.println(“FileServer: “+e.getMessage());

e.printStackTrace();      }   }}


import java.io.*;

import java.rmi.*;

public class FileClient{

public static void main(String argv[]) {

if(argv.length != 2) {

System.out.println(“Usage: java FileClient fileName machineName”);

System.exit(0);      }

try {

String name = “//” + argv[1] + “/FileServer”;

FileInterface fi = (FileInterface) Naming.lookup(name);

byte[] filedata = fi.downloadFile(argv[0]);

System.out.println(“enter the file to download”);

BufferedReader br = new BufferedReader(new InputStreamReader(system.in));

String newname = br.readLine();

File file = new File(newname);

BufferedOutputStream output = new

BufferedOutputStream(new FileOutputStream(file.getName()));




} catch(Exception e) {

System.err.println(“FileServer exception: “+ e.getMessage());

e.printStackTrace();      }   }}


Server folder [interface.java,fileimpl.java,file server.java]

1. Compile all the java program using (javac filename.java)

2. enter the (start rmiregistry) in command line

3. create stub and skeleton using (rmic FileImpl)

4.create one file i.e a.txt in server folder

5. Run the server using (java FileServer)

Client folder[file interface.java,fileclient.java,copy the stub and skeleton from server folder and paste it in client folder]

1. Compile all the java program using (javac filename.java)

(The next contains two parameters First is the text file created by the user second is machine IP Address)

2. Run the Client using (java FileClient   a.txt

3. next step you will give the file name to download the file (Enter the file name to download : b.txt)

4. a.txt and b.txt contains the same content.