ICE 学习笔记

来源:互联网 发布:网络 问号 编辑:程序博客网 时间:2024/04/30 12:06
Hello.ice #ifndef SIMPLE_ICE
  #define SIMPLE_ICE
  //名字空间 or 包名
  module demo.slice.Hello
  {
  interface Hello{
   void printString(string s);
  };
  };#endif
  服务器:
  HelloI.java
  package demo.ice.Hello.server;
  import demo.slice.Hello._HelloDisp;
  import Ice.Current;
  /**
  * @author MudfishCN
  *
  * servant class: HelloI
  * _HelloDisp 基类由slice2java编译器生成,它是一个抽象类。
  * _HelloDisp 抽象类包含一个printString()方法。
  */
  public class HelloI extends _HelloDisp {
   /* (non-Javadoc)
   * @see demo._HelloOperations#printString(java.lang.String, Ice.Current)
   */
   public void printString(String s, Current __current) {
   // TODO Auto-generated method stub
   System.out.println(s);
   }
  }
  HelloServer.java
  package demo.ice.Hello.server;
  import Ice.LocalException;
  /**
  * @author MudfishCN
  * version: 1.0.1
  */
  public class HelloServer {
   public static void main(String[] args) {
   // 定义status变量,用来控制服务器.
   int status = 0;
   Ice.Communicator ic = null; //声明一个Communicator 对象ic
   try {
   // 初始化Ice运行时
   ic = Ice.Util.initialize(args);
   /*
   * 创建一个对象适配器(ObjectAdapter)对象IOAdapter,并初始化之。
   * 参数"HelloWorldAdapter":表示适配器的名字。
   * 参数"default -p 10000":表示适配器使用缺省协议(TCP/IP)在端口10000处监听到来的请求。
   * 服务器配置完成.
   */
   Ice.ObjectAdapter IOAdapter = ic.createObjectAdapterWithEndpoints(
   "HelloWorldAdapter", "default -p 10000");
   /*
   * 为Hello接口创建一个servant.
   */
   Ice.Object IObject = (Ice.Object) new HelloI();
  
   /*
   * 将新的servant添加到适配器,
   * 并将这个新的servant命名为"HelloWorld"
   */
   IOAdapter.add(IObject, Ice.Util.stringToIdentity("HelloWorld"));
  
   /*
   * 激活适配器,以使服务器开始处理来自客户的请求
   */
   IOAdapter.activate();
   /*
   * 挂起发出调用的线程,直到服务器实现终止为止.
   * 或者是通过发出一个调用关闭运行时(run time)的指令来使服务器终止.
   */
   ic.waitForShutdown();
   } catch (LocalException e) {
   // 捕捉ICE运行时可能抛出的所有异常
   e.printStackTrace();
   status = 1;
   } catch (Exception e) {
   // 捕捉串常量
   e.printStackTrace();
   status = 1;
   } finally {
   if (ic != null) {
   ic.destroy();
   }
   }
   System.exit(status);
   }
  }
  HelloClient.java
  package demo.ice.Hello.client;
  import Ice.ObjectPrx;
  import Ice.Util;
  import demo.slice.Hello.HelloPrx;
  import demo.slice.Hello.HelloPrxHelper;
  /**
  * @author MudfishCN
  */
  public class HelloClient {
   public static void main(String[] args) {
   int status = 0;
   String s;
   //创建一个通信器的对象ic
   Ice.Communicator ic = null;
   try {
   // 初始化ICE运行时
   ic = Util.initialize(args);
  
   /*
   * 获取远程对象的代理
   * 创建一个代理对象,并用通信器的stringToProxy()方法初始化之。
   * 参数:"HelloWorld:default -p 10000"
   * 表示:
   */
   ObjectPrx base = ic.stringToProxy("HelloWorld:default -p 10000");
   /*
   * 关键点
   */
   HelloPrx hello = HelloPrxHelper.checkedCast(base);
   //测试向下转换是否成功。如果不成功抛出异常信息"Invalid proxy".
   if (hello == null) {
   throw new Error("Invalid proxy");
   }
   //向服务器发送十条消息
   for(int i=1;i<=10;i++){
   s = "Hello,world!"+Integer.toString(i);
   hello.printString(s);
   }
   } catch (Ice.LocalException e) {
   e.printStackTrace();
   status = 1;
   } catch (Exception e) {
   e.printStackTrace();
   status = 1;
   } finally {
   if (ic != null) {
   //销毁通信连接
   ic.destroy();
   }
   }
   System.exit(status);
   }
  }
原创粉丝点击