ICE 2.0学习笔记1(HelloWorld)

笔记

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

时间: 2024-10-29 01:12:47

ICE 2.0学习笔记1(HelloWorld)的相关文章

hibernate3.0学习笔记

hibernate3学习笔记(二十三)|进阶特性(三) hibernate3学习笔记(二十三)|进阶特性(二) hibernate3学习笔记(二十三)|进阶特性(一) hibernate3学习笔记(二十二)|Query缓存机制 hibernate3学习笔记(二十一)|二级缓存 hibernate3学习笔记(二十)|关系映射:多对多 hibernate3学习笔记(十九)|关系映射:一对一 hibernate3学习笔记(十八)|关系映射:一对多 hibernate3学习笔记(十七)|关系映射:多对一

《从零开始学Swift》Swift 2.0学习笔记(Day 38)——构造函数与存储属性初始化

原创文章,欢迎转载.转载请注明:关东升的博客   构造函数的主要作用是初始化实例,其中包括:初始化存储属性和其它的初始化.在Rectangle类或结构体中,如果在构造函数中初始化存储属性width和height后,那么在定义他们时就不需要初始化了. Rectangle类代码如下: class Rectangle { var width: Double var height: Double init() { width = 0.0 height = 0.0 } } 如果存储属性在构造函数中没有初始

SDL2.0 学习笔记-1 windows下的第一个测试程序

SDL全称是Simple DirectMedia Layer,是一个开源的.跨平台(win32,linux,mac)的多媒体开发c语言库. 官方网站 http://www.libsdl.org/   第一步,下载源文件 首先去这个页面http://www.libsdl.org/tmp/download-2.0.php下载相关资源文件,直接下载SDL2-2.0.0.zip 来自己编译,或者按自己的系统下载相关的开发资源(bin和include).解压资源包后,内容如下:     include目录

ASP Forum2.0学习笔记之二---了解Master Pages库

aspnet forums界面的最关键的问题首先在于它使用了MetaBuilders的Master Pages 控件.到http://www.metabuilders.com/Tools/MasterPages.aspx处下载此控件来研究一下: 一.Master Pages包括四个类: (1)Content: This control contains the content for a particular region 此类控件包含真实内容(2)ContentContainer: This

《从零开始学Swift》学习笔记(Day 3)——Swift 2.0之后增加的关键字

 Swift 2.0学习笔记(Day 3)--Swift 2.0之后增加的关键字   原创文章,欢迎转载.转载请注明:关东升的博客  看了之前的学习笔记知道了什么是关键字,现在提示各位在Swift 2.0之后增加defer.guard.repeat.catch.rethrows.hrow.throws和try关键字,其中repeat关键字替代do - while循环中的do,即中repeat - while循环.而do关键字用于错误处理.catch.rethrows.throw.throws

yii2.0基础的学习笔记

yii2.0学习笔记,比较乱,凑合的看一下. 1.接收参数 $request = \yii::$app->request; $request->get('a','defVal')  接收一个get请求的参数 $request->post('a','defVal')  接收一个post请求的参数 $request->isGet  判断是否是get请求. $request->userIp 获取访问者的ip 2.头部响应 $resp = \YII::$app->respons

《从零开始学Swift》学习笔记(Day 1)——我的第一行Swift代码

 Swift 2.0学习笔记--我的第一行Swift代码 原创文章,欢迎转载.转载请注明:关东升的博客 当第一次看到下面代码时我石化了,这些代码是什么东东?单词拼出来的?  import Foundation         var str = "HelloWorld"        print(str)                晕晕.好吧,低头继续往下看,哦明白了第一句:import Foundation 表示引入Foundation框架.  什么是Foundation框架

《从零开始学Swift》学习笔记(Day 37)——默认构造函数

Swift 2.0学习笔记(Day 37)--默认构造函数原创文章,欢迎转载.转载请注明:关东升的博客 结构体和类的实例在构造过程中会调用一种特殊的init方法,称为构造函数.构造函数没有返回值,可以重载.在多个构造函数重载的情况下,运行环境可以根据它的外部参数名或参数列表调用合适的构造函数.默认构造函数结构体和类在构造过程中会调用一个构造函数,即便是没有编写任何构造函数,编译器也会提供一个默认的构造函数.下面看示例代码: class Rectangle { var width: Double

《从零开始学Swift》学习笔记(Day 2)——使用Web网站编写Swift代码

 Swift2.0学习笔记--使用Web网站编写Swift代码   原创文章,欢迎转载.转载请注明:关东升的博客      Swift程序不能在Windows其他平台编译和运行,有人提供了一个网站swiftstub.com,左栏是代码编辑窗口,右栏是运行结果窗口.可以在任何平台下编译和运行Swift程序. 欢迎关注关东升新浪微博@tony_关东升. 关注智捷课堂微信公共平台,了解最新技术文章.图书.教程信息 更多精品iOS.Cocos.移动设计课程请关注智捷课堂官方网站:http://www