ICE第二篇--一个"hello world"的简单例子

Ice 经典入门和实例 很不错的Ice框架学习资料,Ice综述,核心,高级,服务及实例 立即下载

1 本文介绍一个hello world输出的例子。

ice应用的步骤如下:

1. 编写 Slice 定义并编译它。
2. 编写服务器并编译它。
3. 编写客户并编译它。

基本框架图示:




本文代码图示:


需要注意的概念:

servant   servant其实是服务端实质的动作代码.一个servant 提供一个或多个Ice 对象的实质内容。实际上,servant 就是服务器开发者编写的类的实例,

对象适配器      是对象(或者说是servant)的代理。(1)包含端点地址和对象。适配器和端点地址绑定,对象是注册到对象适配器中的。(2)   只有间接代理时候,客户端才用到适配器

服务端就是   建立适配器,把对象(servant)注册进适配器的过程

客户端就是   连接适配器,获得对象(servant) 的过程


2 我们需要3个程序.

2.1 编写 Slice 定义
编写任何 Ice 应用的第一步都是要编写一个 Slice 定义,其中含有应用所用的各个接口。

module demo

{

interface Printer
{
void printString(string s);
}

};
我们把这段文本保存在叫作 Printer.ice 的文件中。
我们的 Slice 定义含有一个接口,叫作 Printer。目前,我们的接口非常简单,只提供了一个操作,叫作 printString。 printString 操作接受一个
串作为它唯一的输入参数;这个串的文本将会出现在 (可能在远地的)打印机上。

要创建我们的 C++ 应用,第一步是要编译我们的 Slice 定义,生成 C++
代理和骨架。在 UNIX 上,你可以这样编译定义:
$ slice2cpp Printer.ice
slice2cpp 编译器根据这个定义生成两个 C++ 源文件:Printer.h 和Printer.cpp。
• Printer.h
Printer.h 头文件含有与我们的 Printer 接口的 Slice 定义相对应的C++ 类型定义。在客户和服务器源码中必须包括这个头文件。
• Printer.cpp
Printer.cpp 文件含有我们的 Printer 接口的源码。所生成的源码同时为客户和服务器提供针对特定类型的运行时支持。例如,它包含了
在客户端整编参数数据 (传给 printString 操作的串)的代码,以及在服务器端解编数据的代码。我们必须编译 Printer.cpp 文件,并把它链接进客户和服务器。

2 编写和编译服务器

总结服务端代码流程:

建立适配器,建立servant。适配器和servant绑定。激活ice通信器


服务器的源码不多,下面给出了其完整代码:

#include <Ice/Ice.h>
#include <Printer.h>
using namespace std;

using namespace Demo;
class PrinterI : public Printer {
public:
virtual void printString(const string & s,
const Ice::Current &);
};//继承自slice提供了接口
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;//创建一个servant,其实就是服务器对象的实质处理函数
adapter->add(object,ic->stringToIdentity("SimplePrinter"));适配器与servant绑定。括号内是servant和servant名字 或者说  把服务端对象注册进适配器中
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)
ic->destroy();
return status;
}
$ g++ -I. -I$ICE_HOME/include -c Printer.cpp Server.cpp
c++ -o server Printer.o Server.o \   -L$ICE_HOME/lib -lIce -lIceUtil



3 客户端程序 

总结客户端代码流程:

使用servant名称和适配器地址建立代理,代理转换为继承类的servant

#include <Ice/Ice.h>
#include <Printer.h>
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;
}

stringToProxy 返回的代理的类型是 Ice::ObjectPrx,这种类型位于接口和类的继承树的根部。但要实际与我们的打印机交谈,我们需
要的是 Printer 接口、而不是 Object 接口的代理。为此,我们需要调用 PrinterPrx::checkedCast 进行向下转换。这个方法会发送一
条消息给服务器,实际询问 “这是 Printer 接口的代理吗?”如果是,这个调用就会返回 Printer 的一个代理;如果代理代表的是其他类型的
接口,这个调用就会返回一个空代理。

客户的编译和链接看起来与服务器很像:
$ c++ -I. -I$ICE_HOME/include -c Printer.cpp Client.cpp
$ c++ -o client Printer.o Client.o -L$ICE_HOME/lib -lIce -lIceUtil

4 运行客户和服务器
要运行客户和服务器,我们首先要在一个单独的窗口中启动服务器:
$ ./server
我们在这时不会看到任何东西,因为服务器会简单地等待客户与它连
接。我们在另外一个窗口中运行客户:
$ ./client
$
客户会运行并退出,不产生任何输出;但在服务器窗口中,我们会看到
打印机产生的 "Hello World!"。要终止服务器,我们目前的做法是在命
令行上中断它 (我们将在 10.3.1 节看到更干净的服务器终止方式)
。



 本文主要内容来自《ice分布式设计》

Ice开发过程示例Demo -- 异步双向通信 Ice的详细图解安装过程,入门教程以及示例代码 立即下载

相关推荐

自己写的ICE C#的例子

ICE的后台服务,实现接口与数据库的连接,datatable的序列化等等。

ice使用简单式例 c++

ICE提供一些扩展组件,实现网络通讯的负载均衡(ICEGrid),通讯节点统一管理(ICEBOX),程序自动更新(ICEPatch)等,方便应用扩展。  在实现服务端或者客户端的时候通常都要写一些“公式化”的代码,负责Ice通信器初始化、异常捕获,以及应用终止后的销毁。如下:     1int status=0;     2     3    Ice::Communicat

夏末dē黄昏 2080

C#通讯编程实例基于ICE

C#通讯编程实例基于ICE 非常适合C#初学者编程

ICE C++ Hello World

ICE C++ Hello World实例教程 1.  概述 本文演示了如何编写一个最简单的C++ICE(Internet Communications Engine)应用程序,包括必要环境的安装。该应用程序包含客户端和服务端两部分。当服务端正常运行时,运行客户端,将在服务端的标准输出上输出“Hello World”。   2.  安装Ubuntu 安装一份Ubuntu系统,可以是在物理

生命不息 奋斗不止 | LINUX爱好者 世界因你的敲打而改变~~ 9733

Ice入门完整实例

Ice完整实例,详细介绍了一个完整的简单的Ice应用开发过程

uniapp 记录运动轨迹 开发_智能手环穿戴设备APP开发解决方案

智能手环是一种穿戴式智能设备,是目前备受关注的科技产品。目前智能手环具有的功能有记录日常生活中的运动数据、移动轨迹,定位等,有些还可以进行睡眠质量的检测,并将这些数据传送至移动端如手机、平板等,可对数据进行分析,指导健康生活的作用。而智能手环开发方案就是将这些功能实现,将算法烧录到主控板上。智能手环都有哪些功能  1、记录运动数据  对于喜欢健身的用户来说,智能手环记录的运动数据功能...

weixin_39678493的博客 1764

ice hello

第一步:写ice 接口描述语言 (Hello.ice)// ********************************************************************** // // Copyright (c) 2003-2016 ZeroC, Inc. All rights reserved. // // ******************************

litterflybug的专栏 1000

RK3588s Camera ISP调优详解(一)ISP调试工具及环境配置(附下载途径)

本文主要介绍了rkisp tuner工具的连接与使用,并附上了工具及依赖库的下载地址

zongheng_raobo的博客 6270

【ICE】 ICE通信框架 - hello world

1、安装库:ice安装 2、环境配置:如图所示: 示例代码及运行结果,部分注释已经在代码中给出: //.ice module Demo { interface Printer { void printString(string s); }; }; // //// ICE_client.cpp : 定义控制台应用程序的入口点。...

yaotengjian的博客 2434

体系结构学习-6-超标量处理器

 MIPS32-5段流水线采用了指令级并行方式(5个流水段同时运行5条指令)提升系统吞吐率,是一种标量处理器(CPI≥1CPI \ge 1CPI≥1),但是一个周期一条指令以及无法满足现代计算机需求了。 超标量处理器(Superscalar) 1、基本思想:增强指令集并行,让每个周期执行更多指令,实现 CPI<1CPI<1CPI<1 。(IPC=1/CPIIPC = 1...

qq_40891899的博客 1212

U8采购入库单CO接口开发实战:加载、新增与删除操作详解

本文详细解析了用友U8采购入库单CO接口的开发实战,重点介绍了加载、新增与删除三大核心操作的实现方法。通过C#代码示例和实际项目经验,帮助开发者高效处理采购入库单,提升企业供应链管理效率。文章还涵盖了环境配置、异常处理、性能优化等关键技巧,适合U8二次开发人员参考。

weixin_33462927的博客 373

ICE: Hello, World

ICE 是 DCOM/CORBA 改进后的产物,接口描述语言Slice与IDL类似。(一): 定义接口文件printer.icemodule helloworld { interface Printer { void printString(string s); }; }; (二):服务器代 码 #include "stdafx.h" #include #include class PrinterI : public helloworld::Printer {

jsonmore(冯亦成)的专栏 488

别再硬啃C代码了!用Simulink的Matlab Function模块手把手教你搭建CRC8校验模型(附完整M脚本)

本文详细介绍了如何利用Simulink的Matlab Function模块轻松实现CRC8校验模型,替代传统的C代码编写。通过可视化建模和即时验证,开发者可以高效完成算法设计,并自动生成嵌入式代码。文章包含完整的M脚本示例和工程实践技巧,特别适合嵌入式系统开发人员提升工作效率。

weixin_42520661的博客 183

ICE初步----VS2008下的安装及实现hello world简单例子

ICE中间件 简介 略。 VS2008下安装: 1,http://www.zeroc.com/download.html下载Ice-3.4.2.msi,并安装。 2,设置环境变量PATH,如:INSTALLPATH = C:\Program Files (x86), 将C:\Program Files (x86)\ZeroC\Ice-3.4.2\bin添加至path变量中,如果不加,

docblue logging 2693

【Dify系列教程重置精品版】第二章:在Windows上部署Dify

让我们的电脑允许使用Linux系统。有点兴奋是怎么回事?简单来说就是让你的电脑拥有另一个叫做Linux的系统。3.选择“适用于Linux的Windows子系统”与 “虚拟机平台”与“Hyper-V"第1章:安装 wsl (Windows Subsystem for Linux)上一章我们聊了什么是Dify,这一章我们讲一下怎么才能用Dify。好了,我们的环境部署好了,下一章我们正式进入Dify。下载完成后,我们直接一直无脑下一步,安装即可。完成上述步骤,我们就可以开始安装wsl了。我们的虚拟化也是开启的。

xiezhipu的博客 866

Qt5+Ros+GUI界面

在之前建立的工程的基础上添加一个gui界面。 在ros包中新建一个文件夹,名字叫gui 右击gui文件夹添加一个文件,选择Qt->Qt设计师界面类 选择MainWindow 选择下一步 最后在gui中生成三个文件 mainwindow.cpp、mainwindow.h、mainwindow.ui 但此时,这些新创建的文件和原本的ros工程还没建立任何关系,只是目录下多出了几个文件而已...

二毛的博客 8843

ZeroC Ice权威指南-学习笔记1——hello world

前言 ZeroC Ice是一款很好的RPC框架,性能极好。但是参考文档不足是其一大问题,这也影响了它的传播。《ZeroC Ice权威指南》是唯一的中文教材,但写的不尽如人意,作为入门教材,啃着有点费劲。本系列博客就是学习这本教材的学习笔记,可以作为有需要的同学的辅助参考材料。其中主要是实操类的流程介绍,由于书中的ice版本比较老,和比较新的ice版本有不少使用上的差异,本系列博客使用的是ICE3.7.2,按照书中的步骤,会遇到不少的坑,所以整理了一些学习笔记。 但是!学习了一段时间发现,我所在的公司在逐步弃

yunduanyou的博客 1367

【DRAM存储器四十七】LPDDR5介绍--LPDDR5的低功耗技术之DVFS

讲述LPDDR5的DVFSC和DVFSQ的工作原理和要求

highman110的博客 899

ICE入门之hello world

本文主要讲解ICE入门第一个hello world程序编写,内容来源于ICE官方文档。

蜗牛慢慢游 2600

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

简单的ICE通信应用-Hello World

参考《Ice分布式程序设计》马维达 译,冯立彬的博客 一、简述     创建一个非常简单的客户-服务器ice应用。这个应用提供远地打印功能:客户发送要打印的文本给服务器,再由服务器把文本发给打印机。打印程序只是把文本打印到终端,而不是真正的打印机。目的是说明客户怎样与服务器通信。 二、安装ICE          下载安装包:http://www.zeroc.com/do

lihuayong的专栏 2378

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

ICE3.7.2 WIN10 VS2013 创建 “Hello world ” demo

1,下载ice3.7.2 https://zeroc.com/download/Ice/3.7/Ice-3.7.2.msi 2,安装,(其中有一步可以勾选是否添加环境变量,默认勾上)全部下一步。 3,安装完成后环境变量自动添加好了就 path中就有了安装的bin目录了我这里是path:D:\setup\ICE\bin 可以再命令框输入slice2cpp -v 验证看是否出现版本号3.7.2 4,...

sinat_39726210的博客 848

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

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的环境变量: ...

happykejie的专栏 767

Zeroc ice java eclipse slice2java

1. 下载  ice https://download.zeroc.com/Ice/3.6/Ice-3.6.2.msi 我的安装地址为 eclipse 安装 ICE  builder for eclipse 安装完成后配置 到此环境准备好了 下面建工程 ,写代码了 2. 建ice_hello  project 在project下建目录 slice 然后建

泽佑兄弟 ZYbros 2429

ice helloworld java_安装ice-3.4.0,并运行demo里的hello world例子,java

1.ice与webservice一样提供跨平台服务,其它省略介绍2.win7下安装,ice-3.4.0.msi包3.运行ice-3.4.0.msi包,默认安装4.安装后设置ice_home,path,classpth添加ice_home=C:/Program Files/ZeroC/Ice-3.4.0path=% ice_home%/bin;classpth=% ice_home%/lib/Ice...

weixin_35696112的博客 177
上一篇: 《accelerated c++》---------第六章
下一篇: linux自动启动程序
crazyhacking
博客等级 码龄15年 299粉丝 148原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值