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