在上一文章中,我发现ice的server类都是大同小意,每一个ice server类都实现一个Adapter,然后新建一个servant对像,再把servant 对像添加标识符,把servant添加到Adapter中,基本上每天个ice server类都是如此实现的。
其实ice的client类也大致有着相同的规则,我们以上一个SimplePrinter为例,说明为何实现一个client类
1. 和在服务器中一样,我们调用Ice::initialize 初始化Ice run
time。
2. 下一步是获取远地打印机的代理。我们调用通信器的stringToProxy
创建一个代理,所用参数是"SimplePrinter:default -
p 10000"。注意,这个串包含的是对象标识和服务器所用的端口号
3. stringToProxy 返回的代理的类型是Ice::ObjectPrx,这种类型
位于接口和类的继承树的根部。但要实际与我们的打印机交谈,我们需
要的是Printer 接口、而不是Object 接口的代理。为此,我们需要调
用PrinterPrxHelper.checkedCast 进行向下转换。这个方法会
发送一条消息给服务器,实际询问“这是Printer 接口的代理吗?”如
果是,这个调用就会返回Printer 的一个代理;如果代理代表的是其他
类型的接口,这个调用就会返回一个空代理。
4. 我们测试向下转换是否成功,如果不成功,就抛出出错消息,终止客
户。
5. 现在,我们在我们的地址空间里有了一个活的代理,可以调用
printString 方法,把享誉已久的 "Hello World!" 串传给它。服务
器会在它的终端上打印这个串。
客户的编译看起来与服务器很像: