ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ICE 3.7.4 实现客户服务端hello world

2021-09-28 10:33:41  阅读:296  来源: 互联网

标签:Printer const Ice 3.7 ICE world include 安装


环境安装 

第一步,基于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)

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

 

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

module Demo

{

    interface Printer

    {

        void printString(string s);

    }

}

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

输入命令:slice2cpp Printer.ice

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

 

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

如下图所示: 其中Printer.h 和Printer.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 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 ,安装相关依赖(我在测试发现,每次新建一个项目都要安装相关依赖,这个待后面解决)

注意事项:

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

标签:Printer,const,Ice,3.7,ICE,world,include,安装
来源: https://blog.csdn.net/happykejie/article/details/120522325

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有