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