zoukankan      html  css  js  c++  java
  • VS2005配置ICE及写ICE的一个完整的例子

    开发环境:VS2005 ,Ice 版本 3.3.1

    说明:客户端使用ICE远程调用服务器端的方法(printString(string s))

    步骤说明:

    1、安装Ice 版本 3.3.1

    2、设置ICE的环境变量:

    ICE_Dir = =<Ice 安装的根目录>

    PATH=%ICE_Dir%\bin

    设置完变量以后可以在命令行下使用 “slice2cpp”命令检查Ice安装是否成功。

    3、编写接口的定义文件“Printer.ice”:内容如下:

       module Demo {

    interface Printer {

    void printString(string s);

    };

    };

    4、使用slice2cpp命令:slice2cpp <文件目录>\Printer.ice 编译ice文件,执行完该命令会生成Printer.cpp和Printer.h文件。 Printer.cpp文件必须在客户端和服务器端进行编译和链接。(注意:Printer.ice文件不要放在磁盘根目录下,否则会报错)。

    5、配置IDE开发环境并建立服务端,因为我自己使用的是VS2005,就简单介绍下VS2005的配置。以服务器建立为例。

    1)  新建一个名为“consoleServer”的 Win32 console application工程。并创建 “include”目录和“init.config”文件,init.config文件在初始化ICE时候用到。

    2)  添加依赖的头文件和LIB目录和依赖具体lib如下图设置:

    6、编写并编译服务器端代码 代码如下:

     // consoleTest.cpp : Defines the entry point for the console application.

    //

     

    #include "stdafx.h"

    #include <Ice/Ice.h>

    #include <Printer.h>

    #include <string>

     

     

    using namespace std;

    using namespace Demo;

     

     

    class PrinterI : public Printer {

    public:

        virtual void printString(const string& s,

            const Ice::Current&);

    };

     

    void PrinterI::printString(const string& s, const Ice::Current&)

    {

        cout << s << endl;

    }

     

    int _tmain(int argc, _TCHAR* argv[])

    {

        int status = 0;

        Ice::CommunicatorPtr ic;

        try {

            Ice::InitializationData initData;

            initData.properties = Ice::createProperties();

            initData.properties->load("../include/init.config");

            ic = Ice::initialize(initData);

            //ic = Ice::initialize(argc, argv);

            Ice::ObjectAdapterPtr adapter

                = ic->createObjectAdapterWithEndpoints(

                "SimplePrinterAdapter", "default -p 10000");

            Ice::ObjectPtr object = new PrinterI;

            adapter->add(object,ic->stringToIdentity("SimplePrinter"));

            adapter->activate();

            ic->waitForShutdown();

        } catch (const Ice::Exception& e) {

                cerr << e << endl;

            status = 1;

        } catch (const char* msg) {

            cerr << msg << endl;

            status = 1;

        }

        if (ic) {

            try {

                ic->destroy();

            } catch (const Ice::Exception& e) {

                cerr << e << endl;

                status = 1;

            }

        }

        return status;

    }

    (注:如果细心你会发现自动生成的Printer.cpp文件没有首行引入“#include "stdafx.h"”头文件,如果进行编译可能出现如下的错误:printer.cpp(373) : fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source?),只要修改该文件的预编译属性为“Create Precompiled Header (/Yc)”即可 如下图所示:

    7、建立客户端工程

    1)   新建一个名为“consoleServer”的 Win32 console application工程。并创建 “include”目录和“init.config”文件,init.config文件在初始化ICE时候用到。

    2)第二部同服务器的设置一样

     

    8、编写并编译客户端代码 代码如下:

    // consoleClient.cpp : Defines the entry point for the console application.

    //

    #include "stdafx.h"

    #include <Ice/Ice.h>

    #include <Printer.h>

    #include <string>

     

     

    using namespace std;

    using namespace Demo;

     

     

    int _tmain(int argc, _TCHAR* argv[])

    {

        int status = 0;

        Ice::CommunicatorPtr ic;//通信器

        try {

     

            Ice::InitializationData initialData;

            initialData.properties = Ice::createProperties();

            initialData.properties->load("../include/init.config");

            ic = Ice::initialize(initialData);

            Ice::ObjectPrx base = ic->stringToProxy("SimplePrinter:default -p 10000");

            PrinterPrx printer = PrinterPrx::checkedCast(base);//接口代理

            if (!printer)

                throw "Invalid proxy";

            printer->printString("Hello World!");

        } catch (const Ice::Exception& ex) {

            cerr << ex << endl;

            status = 1;

        } catch (const char* msg) {

            cerr << msg << endl;

            status = 1;

        }

        if (ic)

            ic->destroy();

     

        return status;

    }

     

     

    9、测试程序

       记住先启动服务器程序,然后启动客户端程序,否则就会出现如下错误:

    Network.cpp:471: Ice::ConnectFailedException:

    connect failed: Connection refused

      正常运行的结果为服务器端会打印如下字符串。

  • 相关阅读:
    surfer插值方法及提取插值结果 转载
    Surfer的grd数据转换成gmt可用的grd数据方法
    Appium+Python3+ Android入门
    Flask入门的第一个项目
    测试报告模板
    火狐浏览器之伪造IP地址
    获取apk的签名信息
    初识kibana
    Fiddler模拟post四种请求数据
    Python-正则表达式
  • 原文地址:https://www.cnblogs.com/buffer/p/1597805.html
Copyright © 2011-2022 走看看