ICE:C#和Java共同的服务器

本文详细介绍了如何使用C#和ICE框架实现跨语言远程过程调用,包括创建console application项目、添加引用、编写slice定义、生成代码、执行类编写、服务器与客户端代码实现等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面的例子来之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^)/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值