`
zhoucl
  • 浏览: 48810 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

分布式程序设计——RMI简单示例

阅读更多

分布式程序设计现在用的地方可多了,但是自己一直没有去了解这方面的内容,今天兴致一来,就找了本书扫了一下盲,并且做了个简单的示例进行了实现,主要是通过java的RMI(Remote method Invoke)来做的,理论这里就不说了,直接从程序上稍作分析。

RMI应用程序编写步骤

1、定义一个Remote接口:(根据文件名称,读取文件内容)

public interface FileInterface extends Remote
{ 
    public String readFile(String fileName) throws RemoteException;
}

2、实现一个Remote接口

public class FileImpl extends UnicastRemoteObject implements FileInterface {
	
	protected FileImpl() throws RemoteException {
		super();
	}

	@Override
	public String readFile(String fileName) throws RemoteException {
		try {
			File file = new File(fileName);
			StringBuffer sbuffer = new StringBuffer();
			BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
			String str ="";
			while((str = br.readLine()) != null ) {
				sbuffer.append(str + "\n");
			}
			
			return sbuffer.toString();
		} catch (Exception e) {
			System.out.println("FileImpl.readFile(): " + e.getMessage());
			e.printStackTrace();
			return null;
		}
	}

}

3、编写Server端程序

public class FileServer {
	public static void main(String[] args) {
		int portNum = 9090;
		
		if(System.getSecurityManager() == null) {
			System.setSecurityManager(new RMISecurityManager());
		}
		
		try {
			LocateRegistry.createRegistry(portNum);
			FileInterface fi = new FileImpl();
			Naming.rebind("//127.0.0.1:" + portNum + "//FileServer", fi);
			System.out.println("Server Start...");
		} catch (Exception e) {
			System.out.println("FileServer: " + e.getMessage());
			e.printStackTrace();
		}
	}
}

4、编写Client端程序

public class FileClient {
	public static void main(String[] args) {
		if(args.length != 3) {
			System.out.println("Usage: java FileClient filename machinename port");
			System.exit(0);
		}
		
		try {
			String name = "//" + args[1] + ":" + args[2] +  "//FileServer";
			FileInterface fi = (FileInterface)Naming.lookup(name);
			String str = fi.readFile(args[0]);
			System.out.println(str);
		} catch (Exception e) {
			System.out.println("FileServer exception: " + e.getMessage());
			e.printStackTrace();
		}
	}
}

5、生成Stubs和Skeletons,启动服务端和客户端

由于在FileServer中使用的SecurityManager,因此自定义了一个security.policy文件,如下:

grant {
	permission java.security.AllPermission;
};

 执行过程,在源代码中存在于run.bat文件中:

javac org/clzps/distributed/FileInterface.java

javac org/clzps/distributed/FileImpl.java

rmic org.clzps.distributed.FileImpl

javac org/clzps/distributed/FileServer.java

javac org/clzps/distributed/FileClient.java

java -Djava.security.policy=org/clzps/distributed/security.policy org.clzps.distributed.FileServer

 

显示界面如下:


通过客户端访问如下:

java org.clzps.distributed.FileClient D:\Test.txt 127.0.0.1 9090,如下所示:


  • 大小: 71.8 KB
  • 大小: 15.5 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics