客户端打开套接字连接服务器上特定的端口,查找到正在运行的 注册表,因为注册表本身也是个远程对象,返回注册表远程对象的stub到本地,然后客户端通过stub同服务器通信,执行lookup方法,查找到远程接口,并返回这个远程对象的stub到本地,然后客户端对服务器端的访问完全通过这个stub来执行。
因为对象序列化时传送的只是对象的状态,并没有传送 执行的代码,所以需要将客户端需要找到类定义,先从本地的classpath中查找,如果没有,客户端试图从存储在注册表中的远程对象的codebase中查找。然后从codebase的路径中,下载类定义。当受到所有类定义,stub就开始调用服务器对象的相应方法了。stub和sketelon分别是客户端和服务器段的代理,stub是个远程对象。都是用rmic在服务器端生成的。客户端访问的时候,就把stub下载到本地,所以都服务器段的调用实际上通过stub来执行。在jdk1.2之后,sketelon已经不用了,你可以把stub反编译了看看,里面是采用的反射来实现的。