环境安装
第一步,基于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 ,安装相关依赖(我在测试发现,每次新建一个项目都要安装相关依赖,这个待后面解决)
注意事项:
如果在测试过程发现等很久才链接,考虑一下是否端口占用,然后修改端口即可。