运行环境(VS2015)
一、ice配置
1、ICE安装
1、进入程序包管理器(工具->NuGet包管理器->程序包管理器控制台)
2、安装ice、ice builder、ice插件
2.1、安装ice,选择项目,输入install-package zeroc.ice.v140 -version 3.7.1
Tips:V140代表VS的版本,(V140<->VS2015,V120<->VS2013),3.7.1代表ice的版本
2.2、安装ice.builder.msbuild,输入install-package zeroc.icebuilder.msbuild
2.3、 安装ice build插件
二、ice实例
1、配置
1.1、新增Slice Files筛选器(选择项目,鼠标右键)
1.2、修改项目属性
1.2.1、设定ice文件编译输出路径
1.2.2、包含ice输出目录
2、代码编写
Test.ice
扫描二维码关注公众号,回复:
10994774 查看本文章
//Test.ice
module MyIceDemo
{
interface TestDemo
{
void PrintData(string strData);
}
}
Client
//Client.cpp
#include<iostream>
#include<Ice/Ice.h>
#include"Test.h"
using namespace MyIceDemo;
int main(int argc, char *argv[])
{
int status(0);
Ice::CommunicatorPtr ic;
try
{
ic = Ice::initialize(argc, argv);
//tcp/udp必须小写
auto base(ic->stringToProxy("SimplePrinter:tcp -h 127.0.0.1 -p 10000"));
auto printer(Ice::checkedCast<TestDemoPrx>(base));
if (!printer)
throw std::runtime_error("invalid proxy");
printer->PrintData("hello");
}
catch (const Ice::Exception& ex)
{
std::cerr << ex << std::endl;
status = 1;
}
catch (const char* msg)
{
std::cerr << msg << std::endl;
status = 1;
}
if (ic)ic->destroy();
return status;
}
Server
//接口管理类
#include<string>
#include<Ice/Ice.h>
#include"Test.h"
class iceTestImpl :public MyIceDemo::TestDemo
{
public:
iceTestImpl();
~iceTestImpl();
virtual void PrintData(std::string strData, const Ice::Current &);
};
//虚函数实现
void iceTestImpl::PrintData(std::string strData, const Ice::Current &)
{
std::cout << strData.c_str() << std::endl;
}
//Main.cpp
#include<iostream>
#include "iceTestImpl.h"
using namespace MyIceDemo;
int main(int argc,char *argv[])
{
int status(0);
Ice::CommunicatorPtr ic;
try
{
ic = Ice::initialize(argc, argv);
auto adapter(ic->createObjectAdapterWithEndpoints("SimplePrinterAdapter", "default -p 10000"));
auto servant(std::make_shared<iceTestImpl>());
adapter->add(servant, Ice::stringToIdentity("SimplePrinter"));
adapter->activate();
ic->waitForShutdown();
}
catch (const Ice::Exception & e)
{
std::cerr << e << std::endl;
status = 1;
}
catch (const char * msg)
{
std::cerr << msg << std::endl;
status = 1;
}
if (ic)
{
try
{
ic->destroy();
}
catch (const Ice::Exception & e)
{
std::cerr << e << std::endl;
status = 1;
}
}
return status;
}
三、linux安装ice**
3.1、yum源配置
cd /etc/yum.repos.d
sudo wget https://zeroc.com/download/Ice/3.7/el7/zeroc-ice3.7.repo
ls查看ice源
3.2、安装
3.2.1、Install Ice for C++, Python, PHP, and all Ice services.
sudo yum install ice-all-runtime ice-all-devel
3.2.2、Install Freeze for C++
sudo yum install libfreeze-c++-devel freeze-utils
3.2.3、安装的版本号查看:icebox -v