本文介绍搭建ZeroC Ice demo的方法,该demo的搭建过程中使用到了Ice提供的Ice::Application类。

1. Ice::Application介绍

Ice::Application类封装了所有的初始化和终止操作,用户在使用Ice::Application类时,就不需要过分关注初始化及相关异常,而将重点放在服务代码的实现上。
要使用Ice::Application的相关功能,需要继承Ice::Application类、并在派生类中对Ice::Application类中的纯虚方法run进行具体实现,最终的Ice服务接口都是在run方法定义的。

2. demo构建

说明:本文介绍的demo程序是在Centos 7上、使用C++语言开发的,对应的ice版本为3.6.4。

沿用前文《ZeroC Ice介绍与简单demo构建》中已编写的基础框架文件(即Hello.ice、Hello.h、Hello.cpp、HelloI.h、HelloI.cpp),我们继续编写继承Ice::Application类的demo中的剩余文件,这些剩余文件包括:一个继承Ice::Application类的服务端程序、服务端程序的配置文件、一个普通的客户端文件。

2.5 编写Ice服务器代码

说明:本节继承了前文《ZeroC Ice介绍与简单demo构建》的部分内容,所以本节直接以2.5小节开始计数。

Ice的服务端代码继承了Ice::Application类,服务端代码(server.cpp)如下:

#include <Ice/Ice.h>
#include <HelloI.h>using namespace std;class HelloServer : public Ice::Application
{
public:virtual int run(int, char*[]);
};int HelloServer::run(int argc, char*[])
{if(argc > 1){cerr << appName() << ": too many arguments" << endl;return EXIT_FAILURE;}Ice::ObjectAdapterPtr adapter = communicator()->createObjectAdapter("HelloAdapter");Demo::HelloPtr hello = new HelloI;adapter->add(hello, communicator()->stringToIdentity("hello"));adapter->activate();communicator()->waitForShutdown();return EXIT_SUCCESS;
}int main(int argc, char* argv[])
{HelloServer app;return app.main(argc, argv, "config.server");
}

服务端程序的配置文件(config.server)内容如下:

#
# The server creates one single object adapter with the name
# "HelloAdapter". The following line sets the endpoints for this
# adapter.
#
# When no -h <host> option is specified in the endpoints, the default
# value from the Ice.Default.Host property is used. If this property
# isn't set, the endpoints will listen on all available network
# interfaces.
#
HelloAdapter.Endpoints=tcp -p 10000#
# Only listen on the localhost interface by default. You can comment
# out this property to allow listening on all available interfaces.
#
Ice.Default.Host=localhost

注意:本文到现在为止,介绍的几个文件(Hello.ice、Hello.h、Hello.cpp、HelloI.h、HelloI.cpp、server.cpp、config.server)为搭建继承Ice::Application类的Ice demo时需要使用的基础框架文件,对于其他需要继承Ice::Application类进行demo搭建的文章,如无特殊说明,均沿用了这七个基础文件。相关的demo搭建链接如下:

  • 只是继承Ice::Application类搭建Ice demo,不涉及其他技术,请参考本文后续部分。
  • 继承Ice::Application类搭建IceGrid的demo环境,相关文章点击此处。

2.6 编写客户端代码

客户端代码(client.cpp)如下:

#include <Ice/Ice.h>
#include <Hello.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("hello:tcp -h localhost -p 10000");HelloPrx hello = HelloPrx::checkedCast(base);if (!hello){throw "Invalid proxy";}string result = "";result = hello->SayHello("liitdar");cout << "[ice_with_application] client's result: " << result << endl;}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;
}

2.7 编译生成客户端和服务端的应用程序

编译生成服务端应用程序(server),命令如下:

g++ -o server -I. server.cpp Hello.cpp HelloI.cpp -lIce -lIceUtil -lpthread

编译生成客户端应用程序(client),命令如下:

g++ -o client -I. client.cpp Hello.cpp -lIce -lIceUtil -lpthread

2.8 运行服务端与客户端程序

在一个终端运行服务端程序,如下:

./server

新打开一个终端,运行客户端程序,如下:

./client

正常情况下,我们能够在上面的两个终端中看到服务端与客户端的信息交互情况,如下:

【服务端】:

【客户端】:

如果两个终端中出现了上述信息,说明demo程序部署成功了。

ZeroC Ice demo构建(继承Ice::Application类)相关推荐

  1. Ice笔记-利用Ice::Application类简化Ice应用

    作者:ydogg,转载请申明. 在编写Ice相关应用时,无论是Client还是Server端,都必须进行一些必要的动作,如:Ice通信器初始化.异常捕获,以及应用终止后的销毁.鉴于每个应用都需要,Ic ...

  2. PHP中间件ICE,ICE的安装配置,ICE常见编译和运行(异常)错误(自测Php版本安装部分,因为php版本跟ice版本不一样失败)

    ICE(Internet Communications Engine)是Zeroc提供的一款高性能的中间件.使用ICE能使得php(或c++,java,python)与java,c++,.net,py ...

  3. Android 实例解说Application类

    版本:1.0 日期:2014.3.28 版权:© 2014 kince 转载注明出处 何为Application,有何用途?Google官方文档是这样说的:维护全局应用程序的状态,使用的时候继承于它创 ...

  4. Android中用Application类实现全局变量

    在Java中如果要使用全局变量,一般定义public static类型的变量.但是这种方法不符合Android的框架架构,Android中要使用Application context. Applica ...

  5. Java:继承之super关键字,继承之私有权限,继承之方法重写,继承之object类,继承之简单工厂模式

    一.继承的概念及用法       继承背后的思想就是        基于已存在的类来构建新类         当从已存在类继承时,就重用了它的方法和属性,还可以添加新的方法和属性来定制新类以应对需求 ...

  6. Android中Application类用法

    Application类 Application和Activity,Service一样是Android框架的一个系统组件,当Android程序启动时系统会创建一个Application对象,用来存储系 ...

  7. 20151008_Android Application类

    1. Application类 Application和Activity,Service一样,是android框架的一个系统组件,当android程序启动时系统会创建一个 application对象, ...

  8. 在Android开发中怎样使用Application类

    转载地址:http://www.jianshu.com/p/3138f9c351e8 --- 在Android开发中怎样使用Application类 自己独立开发项目才发现以前对Application ...

  9. 什么是继承?Java中如何声明一个类继承另一个类?

    在现实生活中,说到继承,多会想到子女继承父辈的财产.事业等.在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关联体系.例如猫和狗都属于动物,程序中便可以描述为猫和狗继承自动 ...

  10. java 安卓application_Android中Application类用法

    Application类 Application和Activity,Service一样是Android框架的一个系统组件,当Android程序启动时系统会创建一个Application对象,用来存储系 ...

最新文章

  1. 怎么在PHP植入音乐,PHP网站插入音乐
  2. mysql 中limit 用法!!
  3. 计算机软件考试预测,2020年计算机软件水平考试信息技术处理员预测试题及参考答案...
  4. cacti的mysql密码_cacti 监控搭建
  5. [转]android使用shape stroke描边只保留底部
  6. harbor的镜像复制功能使用教程
  7. 深入php-fpm的两种进程管理模式详解
  8. 【ROS问题】rqt_plot运行报错
  9. 事件(二):事件处理程序
  10. html新一代网页播放器源码 未加密
  11. 自检代码中trustmanager漏洞_通达OA远程代码执行漏洞通告
  12. linux的tar命令压缩26g文件,如何使用Linux上的tar命令压缩和解压缩文件 | MOS86
  13. C# Color颜色RGB对照表
  14. 聚合支付系统设计(一)
  15. 做网站必备!该文介绍下国内服务器与国外服务器的区别
  16. python 视频播放 拖动_python + opencv鼠标拖动视频区域裁剪
  17. html5 音乐播放进度条,js实现音乐播放控制条
  18. 激光雷达:905与1550的战争
  19. Cutecom无法打开USB串口
  20. dubbo问题:forbid consumer报错

热门文章

  1. MSB与LSB的含义
  2. 跟KingDZ学HTML5之九 HTML5新的 Input 种类
  3. 微软ReportViewer(rdlc)发布时所需要的动态库(vs2010)
  4. 搭建基于ASP.NET 2.0的DNN 4.X模块开发环境及模块实例(2)
  5. lucene的基础入门
  6. [JZOJ P1327] [DP]订货
  7. 转载--#define 用法
  8. 腾讯2012实习生招聘面试题:矩阵中A移动到B一共有多少走法
  9. SVN客户端服务器搭建与使用(一)
  10. individual program总结2.0