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文件都同一目录中,加进来即可。下面最主要的是在两项目属性中,都分别加上以下配置:
生成解决方案,编译不报错即可。晚上时间紧,就不写得很明细了。