• ICE 学习笔记
    时间:2009-04-12   作者:佚名   出处:互联网

    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);
    }
    }

    网友留言/评论

    我要留言/评论