background image

 
byte buffer[] = new byte[(int)file.length()];
  BufferedInputStream input = new
  BufferedInputStream(new FileInputStream(fileName));
  input.read(buffer,0,buffer.length);
  input.close();
  return(buffer);
  } catch(Exception e){
  System.out.println("FileImpl: "+e.getMessage());
  e.printStackTrace();
  return(null);
  }
  }
  }

  开发服务器
  第三个步骤是开发服务器。服务器需要做三件事:
  创建 RMISecurityManager 的一个实例并安装它
  创建远程对象(在本例中是 FileImpl)的一个实例
  在 RMI 注册表中登记这个创建的对象。实现的范例见代码范例 3。

 

  代码范例 3: FileServer.java
  import java.io.*;
  import java.rmi.*;
  public class FileServer {
  public static void main(String argv[]) {
  if(System.getSecurityManager() == null) {
  System.setSecurityManager(new RMISecurityManager());
  }
  try {
  FileInterface fi = new FileImpl("FileServer");
  Naming.rebind("//127.0.0.1/FileServer", fi);
  } catch(Exception e) {
  System.out.println("FileServer: "+e.getMessage());
  e.printStackTrace();
  }
  }
  }

  语句 Naming.rebind("//127.0.0.1/FileServer", fi)假定 RMI 注册表在缺省的端口
号 1099 上运行。但是,如果 RMI

 

注册表在其他端口号上运行, 就必须在这一句中指定

端口号。例如,如果 RMI 注册表在端口 4500

 

上运行,那么 这一句就变成:

  Naming.rebind("//127.0.0.1:4500/FileServer", fi)
  另外,在这里要着重指出,我们假定 rmi

 

注册表和服务器是在同一台电脑上运 行。