ICE 入门

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文件都同一目录中,加进来即可。下面最主要的是在两项目属性中,都分别加上以下配置:



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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值