ICE 入门

本文详细介绍了在Linux和Windows环境下使用ICE进行C++和Java接口编程的入门步骤,包括环境搭建、代码生成、编译与测试。适用于初学者快速上手ICE技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ICE入门例子,最好参考官方例子:  https://doc.zeroc.com/pages/viewpage.action?pageId=14030991

不同环境下,会有所差别,下面是把我自己ICE在不同环境下入门例子写出来,仅供初学者参考。

我的开发环境:

Linux  System:  centos 6.7 32位

Windows System: win7

ICE :3.6.1

java :jdk7


1、Linux Ice 入门

参考 https://zeroc.com/downloads/ice   在自己系统里中安装好ice。

编译ice 时,需要gcc-c++ ,这需要自己手动安装,我用yum 试了很久都不行,就直接在

https://rpmfind.net/linux/rpm2html/search.php?query=gcc-c%2B%2B

这里,根据自己操作系统版本下载安装吧,如我是32位centos 6.7,直接用

wget  ftp://rpmfind.net/linux/centos/6.7/os/i386/Packages/gcc-c++-4.4.7-16.el6.i686.rpm

下载,到/home/peidw/

然后 rpm -ivh gcc-c++-4.4.7-16.el6.i686.rpm

即可把gcc-c++安装好。


A、在电脑 F:\ice\Printer 目录下,创建Printer.ice文件,内容如:

module Demo {
	interface Printer
	{
	 	void printString(string s);
	};
};

这就最简单的slice例子,可以说是接口定义,定义好接口后,就可以生成c++和java的基础代码。

生成c++命令如下:

slice2cpp   Printer.ice 就会生成c++版 Printer接口基础类。

slice2java  Printer.ice  就会生成java版 Printer接口基础类。

windows 和Linux 下的c++源程序是通用。代码例子大家参考:https://doc.zeroc.com/pages/viewpage.action?pageId=14030991 生成,不做详细介绍。

生成的文件参考下图:



B、编译

在centos 6中装ice后,没有真正意义上的ice_home目录,客户编译命令如下:

g++ -I. -I/usr/include -c Printer.cpp Client.cpp
g++ -o client Printer.o Client.o -lIce -lIceUtil

服务端编译命令台下:

g++ -I. -I/usr/include -c  Printer.h  Printer.cpp PrinterI.cpp
g++ -o server Printer.o PrinterI.o -lIce -lIceUtil

PrinterI.cpp 是服务实现类。


到此编译完成。

C、测试

当执行:root@dev-132 ice-hello]# ./client   命令时,服务端输出

[root@dev-132 ice-hello]# ./server
Hello World!


2、Java Ice 入门

windows7 环境,jdk7,随便建个项目,把上图生成的Demo目录,拷贝进项目录,把ice安装目录的lib里所有的jar加到环境中,至此环境配置完成。

服务类实现代码:


package Demo;


public class PrinterServer {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
	       int status = 0;
	       Ice.Communicator ic = null;
	       try {
	            ic = Ice.Util.initialize(args);
	            Ice.ObjectAdapter adapter =
	            ic.createObjectAdapterWithEndpoints("SimplePrinterAdapter", "default -p 10002");
	            Ice.Object object = new PrrinterImpl();
	            adapter.add(object, ic.stringToIdentity("SimplePrinter"));
	            adapter.activate();
	            ic.waitForShutdown();
	        } catch (Ice.LocalException e) {
	        	System.out.println("-------------Ice.LocalException");
	            e.printStackTrace();
	            status = 1;
	        } catch (Exception e) {
	        	System.out.println("-------------Exception");
	            System.err.println(e.getMessage());
	            status = 1;
	        }
	        if (ic != null) {
	            try {
	                ic.destroy();
	            } catch (Exception e) {
	                System.err.println(e.getMessage());
	                status = 1;
	            }

	        }
	        System.exit(status);
	    
	}

}

客户端实现代码

package client;

public class PrinterClient {

	 public static void main(String[] args){
	        int status = 0;
	        Ice.Communicator ic = null;
	        try {
	            ic = Ice.Util.initialize(args);
	            Ice.ObjectPrx base = ic.stringToProxy("SimplePrinter:default -p 10002");
	            Demo.PrinterPrx printer = Demo.PrinterPrxHelper.checkedCast(base);
	            if (printer == null)
	                throw new Error("Invalid proxy");
	            printer.printString("Hello World!");
	        } catch (Ice.LocalException e) {
	            e.printStackTrace();
	            status = 1;
	        } catch (Exception e) {
	            System.err.println(e.getMessage());
	            status = 1;
	        }
	        if (ic != null) {
	            // Clean up
	            //
	            try {
	                ic.destroy();
	            } catch (Exception e) {
	                System.err.println(e.getMessage());
	                status = 1;
	            }
	        }
	        System.exit(status);
	    }
}


2、VS2013 Ice 入门

新建1个解决方案,该 方案下包含2项目,一个服务端,一个客户端。如下图所示


这新的项目是vc++  ,空白项目,头文件和cpp文件都同一目录中,加进来即可。下面最主要的是在两项目属性中,都分别加上以下配置:



生成解决方案,编译不报错即可。晚上时间紧,就不写得很明细了。



1.1 ICE 概述 网络通信引擎(Internet Communications Engine, Ice)是由 ZeroC的分布式系统开发专家实 现的一种高性能、面向对象的中间件平台。它号称标准统一,开源,跨平台,跨语言,分布式, 安全,服务透明,负载均衡,面向对象,性能优越,防火墙穿透,通讯屏蔽。因此相比 CORBA,DCOM,SOAP,J2EE等的中间件技术,自然是集众多优点于一身,而却没有他们的 缺点。 Ice提供了完善的分布式系统解决方案,适合所有的异构网络环境:客户端和服务器端可以 用不同的程序语言来实现,可以运行在不同的操作系统和不同的体系结构的机器上,使用不同 的网络通信技术(TCP/UDP,SSL或通过插件功能扩展协议)。Ice也提供了客户端和服务器端 的完全分离,客户端不需要知道服务器的实现过程和具体位置。Ice采用软总线的机制,使得在 任何情况下、采用任何语言开发的软件只要符合接口规范的定义,均能集成到分布式环境中去。 Ice面向对象,可以将所有应用看作是对象及相关操作的集合,构建在 Ice之上的分布式系统的 对象的获取只取决于网络的通畅性和获取服务对象特征的准确程度,而与对象的位置以及对象 所处的设备环境无关。 Ice提供了简单的对象模型和类型系统,精简而强大的运行时 API,简单的语言映射,紧凑 高效并可扩展的协议,丰富的客户端调用和服务器端分派方式,完善的安全解决方案,大量高 效而实用的服务和工具。基于这些,Ice特别适合对技术和性能要求都很高的分布式系统开发。 由于这些原因,现在 Ice已经被很多大公司采用,作为安全、伸缩性强的底层通信平台。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值