下面的例子来之ice的说明文档。有点修改。
1、创建一个c#的console application
2、添加对icecs.dll的引用
3、编写slice定义
4、生成c#代码
调用mkdir generated生成一个目录
调用 slice2cs -outputdir generated printer.ice 生成c#代码
5、将生成的c#代码引用到项目中
6、编写执行类
下面的代码是负责执行printstring的类的代码。很简单,它继承于printerdisp接口。
7、编写服务器执行代码
代码框架
上面的代码框架展示了如果要写一个服务器端的执行代码,大致要写那些内容。这些内容是固定的。如下的代码,就可以看到,实际的执行代码被写在try catch语句中。
填入代码
上面的代码作了如下的事情
通过ice.util.initialize在运行时初始化了ice。initialize返回的ice.communicator是ice运行时的主要句柄。
通过createobjectadapterwithendpoints创建了一个对象适配器,传入的参数中"simpleprinteradapter"是适配器的名称,"default -p 10000"命令适配器侦听tcp/ip的10000端口。
至此,我们初始化了ice运行时,并且通过printi的实例创建了printer的服务。
接下来,我们通过add方法通知适配器,一个名称为simpleprinter的服务被加入到了服务列表中。
然后,通过active方法激活适配器。
最后,调用waitfotshutdown,通知适配器在服务器关闭之前,适配器响应请求。如果服务器关闭,那么适配器也关闭。
编写客户端
1、新建一个console application项目,并加入printer.cs文件,别忘了引用icecs.dll。
2、编写客户端执行代码
上面的代码作了如下的事情:
通过ice.util.initialize在运行时初始化了ice。
使用标示simpleprinter:default p 10000获取了远程printer的代理。注意,simpleprinter:default p 10000与服务器端注册的服务名称和端口是一样的。stringtoproxy返回了objectprx接口,这是最基本的接口。但是,要真正的和服务器通讯,使用这个接口是没用的,我们要得到的是printer的接口。
为了得到printer的接口,我们使用了printerprxhelper.checkcase方法,这个方法向服务器发出请求:是否有一个printer接口的代理?如果有,那么返回一个printer类型的代理,如果没有,那么就返回null。
那么我们就有了一个printer的代理,那么就可以使用printstring方法了。
编译运行
编译后,分别运行服务器程序和客户端程序,我们可以看到如下的结果
用java作客户端
1、ice是跨语言的,所以,我们尝试一下。用同样的slice文件生成java文件
slice2java -outputdir generated printer.ice
2、编写执行类printeri.java
我们可以看到,步骤和c#一模一样。
3、编写客户端代码
从上面可以看出,又一个和c#一模一样。当然是除去了语言特征的:d。
4、编译,运行
果然,运行成功。
最后,值得一提的是,如果把上面的printeri.java中的输出字符串改了,那么也不会影响最后的输出。很显然,这printeri.java在这个情况下仅仅是一个代理文件。
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/