ICE(二)——VS2013下配置与Hello world

1.新建解决方案MyICE;
2.在解决方案下新建两个项目,分别是server和client;
3.设置属性
在C/C++——常规中附加包含目录中添加ICE安装中include路径;
在链接器——常规中附加库目录中添加ICE安装中lib/vc20路径(由于我是VS2013,因此是vc120路径);
在链接器——输入中附加依赖项中添加iced.lib和lceutild.lib(**d.dll代表debug);
4.在server右键最下方Ice Configuration中勾选Enable Ice Builder;
5.在server源文件中新建Printer.ice。注意后缀名为ice。

//Printer.ice
module Demo{
    interface Printer{
        void printString(string s);
    };
};

编译后会生成Printer.h和Printer.cpp文件和一系列外部依赖项。
6.在server源文件中新建server.cpp。

//server.cpp
#include <Ice/Ice.h>
#include "Printer.h"
#include <iostream>

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 main(int argc, char * argv[])
{
    int status = 0;
    Ice::CommunicatorPtr ic;
    try
    {
        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;
}

7.客户端
同上3-5步的服务器部分相同。再添加client.cpp文件。

//client.cpp
#include<Ice/Ice.h>
#include "Printer.h"
#include <iostream>
#include <string>

using namespace std;
using namespace Demo;

int main(int argc, char * argv[])
{
    int status = 0;
    Ice::CommunicatorPtr ic;
    try{
        ic = Ice::initialize(argc, argv);
        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;
    system("pause");
}

8.先运行server,再运行client。得到Hello world!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值