zoukankan      html  css  js  c++  java
  • 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";)

  • 相关阅读:
    HDU 3123-GCC(递推)
    新交互英语外挂全自己主动版
    BZOJ 2716 Violet 3 天使玩偶 CDQ分治
    关于 FPGA 和 外部芯片接口时序设计
    Ubuntu启动、停止、重新启动MySQL,查看MySQL错误日志、中文编码错误
    Drupal 7 建站学习手记(四):怎样改动Nivo Slider模块的宽高
    Linux下安装Oracle的过程和涉及的知识点-系列4
    游戏开场镜头拉近(Unity3D开发之四)
    并发编程
    给线程发送消息让它执行不同的处理
  • 原文地址:https://www.cnblogs.com/chris-cp/p/4142312.html
Copyright © 2011-2022 走看看