ICE 3.7.4 实现客户服务端hello world

环境安装 

第一步,基于Windows下的安装,所以下载windows版的Ice,官网最新版本是Ice3.5.1-6
https://download.zeroc.com/Ice/3.5/Ice-3.5.1-6.msi  

 我安装的ice3.7.6版本

  第二步,安装Ice:
               常规安装即可,可以选择安装目录,本次安装是在C:\Program Files (x86)\Ice-3.5.1\Ice-3.5.1

  第三步,设置Ice的环境变量:
                主要有环境变量需要设置:path、classpath、ICE_HOME
               例如:
ICE_HOME:C:\Program Files (x86)\Ice-3.5.1\Ice-3.5.1
path:%ICE_HOME%/bin;

  第四步,检验:
在命令行中输入: icegridnode --version 
       如果现实当前安装的ice版本号,那么就说明安装成功。

实现ICE hello world DEMO

   参考官网:

Introduction - Ice (zeroc.com)

ICE 3.7.4 实现客户服务端hello world

随意新建一个C++ 控制台程序

ICE 3.7.4 实现客户服务端hello world

 

在创建项目根目录创建一个接口客户端和服务端通信约定的接口协议参考官网如下

module Demo

{

    interface Printer

    {

        void printString(string s);

    }

}

从根目录——进入CMD控制台:

输入命令:slice2cpp Printer.ice

得到两个文件Printer.h和Printer.cpp

ICE 3.7.4 实现客户服务端hello world

 

新建一个客户端控制台程序, 新建一个服务端控制台程序:

如下图所示: 其中Printer.h 和Printer.cpp拷贝生产的文件进入项目即可,如果拷贝不生效,可以新建一样文件再拷贝内容进入即可。

ICE 3.7.4 实现客户服务端hello world

 

ICE 3.7.4 实现客户服务端hello world

 

再客户端创建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 11000");

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;

}

在服务端创建一个server.cpp

拷贝如下内容:

#include <Ice/Ice.h>

#include "Printer.h"

#include <iostream>

#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

main(int argc, char* argv[])

{

try

{

Ice::CommunicatorHolder ich(argc, argv);

Ice::ObjectAdapterPtr adapter = ich->createObjectAdapterWithEndpoints("SimplePrinterAdapter", "default -p 11000");

Ice::ObjectPtr object = new PrinterI;

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

adapter->activate();

cout << "listen 10000 port" << endl;

ich->waitForShutdown();

}

catch (const std::exception& e)

{

cerr << e.what() << endl;

return 1;

}

return 0;

}

项目加载ICE

上面都准备好了,可能项目ICE相关依赖无法找到,通过NuGet程序包 ,搜索ICE 按照项目依赖即可。ICE 3.7.4 实现客户服务端hello world

 

输入ICE ,安装相关依赖(我在测试发现,每次新建一个项目都要安装相关依赖,这个待后面解决)

注意事项:

 如果在测试过程发现等很久才链接,考虑一下是否端口占用,然后修改端口即可。

上一篇:[ICPC2016上海D] Ice Cream Tower - 二分


下一篇:流媒体技术之ICE工作原理