ICE之C/S通信原理
1 /* 2 在ICE文档中只需要声明module名称,接口名称,方法名称 3 */ 4 5 #ifndef SIMPLE_ICE 6 #define SIMPLE_ICE 7 8 module Demo{ //module名称 9 interface Printer //接口名称 10 { 11 void printString(string s); //方法名称 12 13 }; 14 15 }; 16 17 #endif
s端示例:
try{ ic = Ice.Util.initalize(ref args); Ice.ObjectAdapter adapter = ic.createObjectAdapterwithEndpoints("SimplePrintAdapter", "default -p 10000"); Ice.Object obj = new Printerl(); //Printerl类继承了Printer adapter.add(obj, ic.stringToldentity("SimplePrinter")); adapter.activate(); ic.waitForShutdown(); }catch (Exception e){ Console.Error.WriterLine(e); status =1; }
功能:
1、创建一个对象适配器(ObjectAdapter)对象IOAdapter,并初始化之;
2、参数“SimplePrinterAdapter”:表示适配器的名字;
3、参数“default -p 10000”:表示适配器使用缺省协议(TCP/IP)在端口10000处监听到来的请求;
4、服务器配置完成;
5、为Printerl接口创建一个servant;
6、激活适配器,以使服务器开始处理来自c端的请求;
7、挂起发出调用的线程,知道服务器实现终止为止;
8、或者是通过发出一个调用关闭运行(run time)的指令来使服务器终止;
C端: try{ ic = Ice.Util.initialize(ref args); //获取远程对象代理 Ice.ObjectPrx obj= ic.stringToProxy("SimplePrinter:default -p 10000"); //创建一个代理对象,并用通信器的stringToProxy()方法初始化之; PrinterPrx printer = PrinterPrxHelper.checkCast(obj); //调用服务鉴别函数 if(printer == NULL) { throw new ApplicationException("Invalid proxy"); printer.printString("Hello World!!"); //成功则远程调用方法 }catch (Exception e){ Console.Error.WriteLine(e); status = 1; } }
功能:
1、获取远程对象代理
2、创建一个代理对象,并用通信器的stringToProxy()方法初始化之;
3、提供参数:“SimplePrinter:default -p 10000”
4、调用服务鉴别函数,如果不成功则抛出异常信息“Invalid proxy”;成功则
远程调用方法:printer.printString("hello world";)