开发客户机
生成存根和基干,启动 RMI 注册表、服务器和客户机
下面我们将通过开发一个文件传输程序来实践这些步骤。
范例: 文件传输程序
这个应用程序允许客户机从远程主机上传送(即下载)任何类型的文件(
纯 文本或二进
制文件)
。第一步是定义一个远程接口,这个接口规定了服务器所提 供方法的信号,客户
机将调用这些方法。
定义一个远程接口
用于文件下载应用程序的远程接口如代码范例 1
所示。接口 FileInterface 提供了一
个方法 downloadFile
,这个 方法接受 String 参数(文件名),将文件的数据以字节数组
的形式 返回。
代码范例 1 1: FileInterface.java
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface FileInterface extends Remote {
public byte[] downloadFile(String fileName) throws
RemoteException;
}
请注意 FileInterface 的以下特征:
它必须声明为 public
,这样客户机才能加载实现远程接口 的远程对象。
它必须扩展为 Remote
接口,以满足使该对象成为远程对象的 要求。
这个接口中的每种方法都必须投出一个 java.rmi.RemoteException。
实现远程接口
下一步是实现接口 FileInterface。实现的范例见代码范例 2
。 请注意,除了实现
FileInterface 之外,还把 FileImpl 类扩展为 UnicastRemoteObject。这表示 FileImpl
类 将用于创建一个单独的、不可复制的远程对象,它使用 RMI 缺省的基于 TCP
的传送 通
道进行通讯。
代码范例 2: FileImpl.java
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{
super();
name = s;
}
public byte[] downloadFile(String fileName){
try {
File file = new File(fileName);