`
nirvana_blanks
  • 浏览: 40339 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Ubuntu下搭建 ice 开发环境

阅读更多

Ubuntu上安装Ice 3.3很方便 ,软件源里有,直接apt-get就可以

要安装Ice 3.4需要自己下载源码,编译安装,安装之前要安装Ice所依赖的软件包

 

apt-get install libdb4.6++-dev libbz2-dev bzip2 libssl-dev libreadline5-dev libexpat1-dev mcppI

 然后:下载Ice-3.4.1.tar.gz

 下载后安装解压,进入cpp目录,运行make ,make install 进行安装,默认安装路径在/opt/Ice-3.4.1

  安装完后添加环境变量:

 

vi  ~/.bashrc

   添加如下内容:

 

  export ICE_HOME=/opt/Ice-3.4.1

  export PATH=$ICE_HOME/bin:$PATH

  export LD_LIBRARY_PATH=$ICE_HOME/lib:$LD_LIBRARY_PATH

   然后你就可以使用如下命令去生成代码了:

 

slice2cpp      slice2freeze   slice2html     slice2php      slice2rb

slice2cs       slice2freezej  slice2java     slice2py
 

如果我们使用java开发ice接口需要Ice.jar,进入java目录,运行ant build.xml ,会在lib目录下生成Ice.jar

如果我们使用python开发ice接口需要安装ice-python 使用命令:sudo apt-get install ice-python 安装

下面来做一个小例子:

slice文件:

 

module com{
	module demo{
		module mingfei{
			module core{
				module generated{	
					struct Person{
						string name;
						int age;
					};

					sequence<Person> personList;
			
					dictionary<string,Person> personMap;

					interface HelloMingFei{
						string hello(string name);

						personList getPersonList();

						personMap getPersonMap();

					};
				};
			};
		
		};
	};
};
 

我们使用python开发server端:

server.py:

 

import sys,traceback,Ice,IcePy
Ice.loadSlice("Test.ice")

import com.demo.mingfei.core.generated  

class  HelloMingFeiI(com.demo.mingfei.core.generated.HelloMingFei ):
    def hello(slef ,s,current=None):
        return "hello %s" % s 
    def getPersonList(self,current=None):
        p1 = com.demo.mingfei.core.generated.Person("mingfei",1)
        p2 = com.demo.mingfei.core.generated.Person("mingtao",2)
        personList = [p1,p2]
        return personList
    def getPersonMap(self,current=None):
        p1 = com.demo.mingfei.core.generated.Person("mingfei",1)
        personDict = {"mingfei":p1}
        p2 = com.demo.mingfei.core.generated.Person("mingtao",2)
        personDict["mingtao"] = p2
        return personDict
        
status = 0
ice = None
try:
    ic = Ice.initialize(sys.argv)
    adapter = ic.createObjectAdapterWithEndpoints("HelloMingFeiAdapter","default -p 10000")
    objectI = HelloMingFeiI()
    adapter.add(objectI,ic.stringToIdentity("HelloMingFei"))
    adapter.activate()
    ic.waitForShutdown()
except:
    traceback.print_exc()
    status = 1


if ic :
    #Clean up
    try:
        ic.destroy()
    except:
        traceback.print_exc()
        status = 1
    
sys.exit(status)

 使用java来开发client:

 首先使用slice2java Test.ice 生成java代码

 Client.java:

package com.demo.mingfei.core.generated;

public class Client {
	
	
	public static void main(String [] args){
		int status = 0;  
        Ice.Communicator ic = null;  
        try {  
            ic = Ice.Util.initialize(args);  
            Ice.ObjectPrx base = ic.stringToProxy("HelloMingFei:default -p 10000");  
            HelloMingFeiPrx printer = HelloMingFeiPrxHelper.checkedCast(base) ;
            if (printer == null) {  
                System.out.println("invalid proxy");  
            }  
            String out = printer.hello("mingfei");
            System.out.println(out);  
        } catch (Ice.LocalException e) {  
            e.printStackTrace();  
            status = 1;  
        } catch (Exception e) {  
            System.err.print(e.getMessage());  
            status = 1;  
        } finally {  
            if (ic != null) {  
                ic.destroy();  
            }  
        }  
        System.exit(status);  
	}

}
再讲一讲使用java开发server:
 首先使用slice2java Test.ice 生成java代码
package com.demo.mingfei.core.generated;

import java.util.HashMap;
import java.util.Map;

import Ice.Current;


public class Server extends _HelloMingFeiDisp{
	@Override
	public Person[] getPersonList(Current current) {
		Person p1 = new Person();
		p1.name = "mingtao";
		p1.age = 2;
		return new Person[]{p1};
	}
	
	@Override
	public Map<String, Person> getPersonMap(Current current) {
		Person p1 = new Person();
		p1.name = "mingtao";
		p1.age = 2;
		
		Person p2 = new Person();
		p2.name = "mingfei";
		p2.age = 2;
		
		
		Map<String,Person> map = new HashMap<String,Person>();
		map.put("mingtao", p1);
		
		map.put("mingfei", p2);
		return map;
	}
	
	@Override
	public String hello(String name, Current current) {
		// TODO Auto-generated method stub
		return "hello " + name;
	}
	
	
	public static void main(String [] args){
		int status = 0;  
	     Ice.Communicator ic = null;  
	     try {  
	         ic = Ice.Util.initialize(args);// 初始化参数  
	         Ice.ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints(  
	                 "HelloMingFeiAdapter", "default -p 10000");// 创造对象适配器  
	         Ice.Object objcet = new Server();// 创建servant对象  
	         adapter.add(objcet, Ice.Util.stringToIdentity("HelloMingFei"));// 适配器添加一个新的servant,给servant对象取个名字  
	         adapter.activate();  
	         System.out.println("connection success");  
	         ic.waitForShutdown();  
	     } catch (Ice.LocalException e) {  
	         e.printStackTrace();  
	         status = 1;  
	     } catch (Exception e) {  
	         System.err.print(e.getMessage());  
	         status = 1;  
	     } finally {  
	         if (ic != null) {  
	             ic.destroy();  
	         }  
	     }  
	     System.exit(status);  
	}
}
使用python开发client:
client.py:
import sys,Ice,traceback
Ice.loadSlice("Test.ice")
import com.demo.mingfei.core.generated

status = 0
ice = None
try:
    ic = Ice.initialize(sys.argv)
    base = ic.stringToProxy("HelloMingFei:default -p 10000")
    serviceI = com.demo.mingfei.core.generated.HelloMingFeiPrx.checkedCast(base)
    if not serviceI:
        raise RuntimeError("Invalid proxy")

    print  serviceI.hello("mingfei")
    print "\r\n"
    personList =  serviceI.getPersonList()
    personListSize = len(personList)
    for i in range(len(personList)):
        print "my name is %s ,and %d years old" %(personList[i].name , personList[i].age)
    print "\r\n"
    personDict = serviceI.getPersonMap()
    print "my name is %s ,and %d years old"   %( personDict["mingfei"].name  , personDict["mingfei"].age)
    print "my name is %s ,and %d years old"   % (personDict["mingtao"].name  , personDict["mingtao"].age)
    
except:
    traceback.print_exc()
    status = 1

if ic:
    # Clean up
    try:
        ic.destroy()
    except:
        traceback.print_exc()
        status = 1

sys.exit(status)
 

分享到:
评论

相关推荐

    Ubuntu-zeroc-ice 环境安装

    在Ubuntu系统上安装Zeroc-ICE环境主要涉及以下知识点: ...安装Zeroc-ICE是进行相关开发或者搭建分布式系统的前提,因此对于想要在Ubuntu环境下利用Zeroc-ICE进行开发的用户来说,这些步骤是入门级别的必要知识。

    Ice_install.rar_ICE_ISCE install_ice lin_ice linux

    本教程将详细介绍如何在Linux环境下搭建ICE平台,这对于进行ICE相关的开发工作至关重要。 首先,安装ICE的前提条件是拥有一个稳定且兼容的Linux操作系统。Ubuntu或CentOS等Linux发行版通常是开发环境的首选。确保...

    KMS视频推流服务搭建.txt

    编辑Demo的JavaScript文件,增加ICE Servers配置,以支持通过STUN和TURN服务器进行NAT穿越。 ```javascript vim kurento-rtp-receiver/src/main/resources/static/js/index.js ``` 在`function start()`函数内,...

    janus 搭建过程.docx

    这里提供了在Ubuntu环境下安装Janus的步骤: 1. **更新系统**:使用`sudo apt-get update`和`sudo apt-get upgrade`来确保系统软件包是最新的。 2. **安装基础工具**:安装`aptitude`、`git`、`gtk-doc-tools`、`...

    Android4.0编译烧写[归纳].pdf

    首先,需要安装Ubuntu 11.04作为开发环境,推荐分配至少60GB的硬盘空间,1.5GB的内存和1.5GB的SWAP分区。安装完成后,通过`sudo passwd`设置root密码,并在root权限下进行后续操作。 2. **软件安装**: 使用`apt-...

    WebRTC零基础开发者教程(pdf)

    编译过程包括在Windows系统下进行编译,以及在Linux环境下编译WebRTC源码,甚至是在Linux系统下编译适用于Android平台的WebRTC。 WebRTC开发部分是教程的核心,介绍了开发P2P视频软件需要处理的关键问题,比如用户...

    开源FPGA开发板-电路方案

    开发环境搭建 视频教程 FPGA教程 参考 iCESugar 介绍iCESugar 是MuseLab基于Lattice iCE40UP5k设计的开源FPGA开发板,开发板小巧精致,资源丰富,板载RGB LED,Switch,TYPE-C-USB, Micro-USB,大部分IO以标准PMOD...

    基于qt和PJSIP库的小项目

    1. **Qt环境搭建**:了解如何安装Qt开发环境,创建一个新的Qt项目,并设置好编译器和链接器选项。 2. **PJSIP库的获取与配置**:学习如何下载PJSIP库,配置编译环境,以及将编译后的库文件链接到Qt项目中。 3. **...

    android源码下载编译

    以下是一个详细的指南,讲解如何在Ubuntu环境下搭建Android源码编译环境,下载Android 4.0.3(Ice Cream Sandwich,简称ICS)的源码,并进行编译。 1. **安装Ubuntu虚拟机**: - 首先,你需要在主机上安装一个支持...

    Powerlink课程设计报告-现场总线技术及应用.doc

    通过实际操作,学生将学习如何在Linux环境下实现Powerlink的主站和从站通信,从而提升对实时网络通信系统的理解和应用能力。 **二、课程设计题目及要求** 1. **题目**:Linux操作系统下的Powerlink主站和从站通信 ...

    SC8810客户化文档4.0.3

    1. **操作系统**: 通常,Android开发和编译需要在Linux环境下进行,如Ubuntu或Debian。确保安装了最新的稳定版本。 2. **工具链**: Android的交叉编译需要特定的工具链,包括GCC编译器、GNU Make等。安装对应SC8810...

    webrtc教程(v0.3)

    **1.4 本地集成开发环境(IDE)** - **Visualstudio** - **概述**:Visual Studio是一种非常强大的IDE,适用于Windows平台上WebRTC项目的开发。 - **使用**:通过导入项目文件(.sln)启动项目,在IDE中完成编辑...

    RTCMultiConnection 基于webrtc的音视频流媒体服务器

    **Ubuntu 14.04 Desktop AMD64** 是一个广泛使用的Linux发行版,适合搭建服务器环境。 - **升级GCC版本**:GCC (GNU Compiler Collection) 是一个编译器集合,包含了C、C++等语言的编译器。对于Node.js的编译安装,...

    php调用java方法介绍

    本文将详细介绍如何在Linux环境下通过PHP调用Java的方法,并涉及必要的环境配置、工具安装以及示例代码。 #### 二、环境准备 为了能够顺利地在PHP中调用Java方法,我们需要先搭建好基础的运行环境: 1. **操作...

Global site tag (gtag.js) - Google Analytics