C++使用ICE实现两台主机通信实例

本文介绍了如何利用ICE(Internet Communications Engine)在C++中实现两台主机之间的通信。ICE是一种类似Google Protocol Buffer和gSOAP的技术,通过编写.ice配置文件,然后用slice2cpp工具生成C++代码,实现跨主机通信的功能。
摘要由CSDN通过智能技术生成

ice使用过程跟google protocol buffer、gsoap类似,都是先写一个类似配置文件的东西,然后使用提供的工具生成相应语言的代码。

ice先写一个后缀名为.ice的文件,然后使用slice2cpp.exe生产对应c++代码,如下

module MCal
{
    interface Cal
    {
        int add(int num1,int num2);
        int sub(int num1,int num2);  
    };
};

其中MCal是生成c++类的命名空间,Cal是生成类的名字,add和sub是定义类的两个方法。

可以直接命令行执行slice2cpp Caculator.ice生成,也可以在vs中选择slice2cpp作为编译.ice的工具生成,下面是工具生成的代码

// **********************************************************************
//
// Copyright (c) 2003-2016 ZeroC, Inc. All rights reserved.
//
// This copy of Ice is licensed to you under the terms described in the
// ICE_LICENSE file included in this distribution.
//
// **********************************************************************
//
// Ice version 3.6.3
//
// <auto-generated>
//
// Generated from file `Caculator.ice'
//
// Warning: do not edit this file.
//
// </auto-generated>
//

#ifndef __Caculator_h__
#define __Caculator_h__

#include <IceUtil/PushDisableWarnings.h>
#include <Ice/ProxyF.h>
#include <Ice/ObjectF.h>
#include <Ice/Exception.h>
#include <Ice/LocalObject.h>
#include <Ice/StreamHelpers.h>
#include <Ice/Proxy.h>
#include <Ice/GCObject.h>
#include <Ice/AsyncResult.h>
#include <Ice/Incoming.h>
#include <IceUtil/ScopedArray.h>
#include <IceUtil/Optional.h>
#include <Ice/StreamF.h>
#include <IceUtil/UndefSysMacros.h>

#ifndef ICE_IGNORE_VERSION
#   if ICE_INT_VERSION / 100 != 306
#       error Ice version mismatch!
#   endif
#   if ICE_INT_VERSION % 100 > 50
#       error Beta header file detected
#   endif
#   if ICE_INT_VERSION % 100 < 3
#       error Ice patch level mismatch!
#   endif
#endif

namespace IceProxy
{

namespace MCal
{

class Cal;
void __read(::IceInternal::BasicStream*, ::IceInternal::ProxyHandle< ::IceProxy::MCal::Cal>&);
::IceProxy::Ice::Object* upCast(::IceProxy::MCal::Cal*);

}

}

namespace MCal
{

class Cal;
::Ice::Object* upCast(::MCal::Cal*);
typedef ::IceInternal::Handle< ::MCal::Cal> CalPtr;
typedef ::IceInternal::ProxyHandle< ::IceProxy::MCal::Cal> CalPrx;
void __patch(CalPtr&, const ::Ice::ObjectPtr&);

}

namespace MCal
{

class Callback_Cal_add_Base : virtual public ::IceInternal::CallbackBase { };
typedef ::IceUtil::Handle< Callback_Cal_add_Base> Callback_Cal_addPtr;

class Callback_Cal_sub_Base : virtual public ::IceInternal::CallbackBase { };
typedef ::IceUtil::Handle< Callback_Cal_sub_Base> Callback_Cal_subPtr;

}

namespace IceProxy
{

namespace MCal
{

class Cal : virtual public ::IceProxy::Ice::Object
{
public:

    ::Ice::Int add(::Ice::Int __p_num1, ::Ice::Int __p_num2)
    {
        return add(__p_num1, __p_num2, 0);
    }
    ::Ice::Int add(::Ice::Int __p_num1, ::Ice::Int __p_num2, const ::Ice::Context& __ctx)
    {
        return add(__p_num1, __p_num2, &__ctx);
    }
#ifdef ICE_CPP11
    ::Ice::AsyncResultPtr
    begin_add(::Ice::Int __p_num1, ::Ice::Int __p_num2, const ::IceInternal::Function<void (::Ice::Int)>& __response, const ::IceInternal::Function<void (const ::Ice::Exception&)>& __exception = ::IceInternal::Function<void (const ::Ice::Exception&)>(), const ::IceInternal::Function<void (bool)>& __sent = ::IceInternal::Function<void (bool)>())
    {
        return __begin_add(__p_num1, __p_num2, 0, __response, __exception, __sent);
    }
    ::Ice::AsyncResultPtr
    begin_add(::Ice::Int __p_num1, ::Ice::Int __p_num2, const ::IceInternal::Function<void (const ::Ice::AsyncResultPtr&)>& __completed, const ::IceInternal::Function<void (const ::Ice::AsyncResultPtr&)>& __sent = ::IceInternal::Function<void (const ::Ice::AsyncResultPtr&)>())
    {
        return begin_add(__p_num1, __p_num2, 0, ::Ice::newCallback(__completed, __sent), 0);
    }
    ::Ice::AsyncResultPtr
    begin_add(::Ice::Int __p_num1, ::Ice::Int __p_num2, const ::Ice::Context& __ctx, const ::IceInternal::Function<void (::Ice::Int)>& __response, const ::IceInternal::Function<void (const ::Ice::Exception&)>& __exception = ::IceInternal::Function<void (const ::Ice::Exception&)>(), const ::IceInternal::Function<void (bool)>& __sent = ::IceInternal::Function<void (bool)>())
    {
        return __begin_add(__p_num1, __p_num2, &__ctx, __response, __exception, __sent);
    }
    ::Ice::AsyncResultPtr
    begin_add(::Ice::Int __p_num1, ::Ice::Int __p_num2, const ::Ice::Context& __ctx, const ::IceInternal::Function<void (const ::Ice::AsyncResultPtr&)>& __completed, const ::IceInternal::Function<void (const ::Ice::AsyncResultPtr&)>& __sent = ::IceInternal::Function<void (const ::Ice::AsyncResultPtr&)>())
    {
        return begin_add(__p_num1, __p_num2, &__ctx, ::Ice::newCallback(__completed, __sent));
    }
    
private:

    ::Ice::AsyncResultPtr __begin_add(::Ice::Int __p_num1, ::Ice::Int __p_num2, const ::Ice::Context* __ctx, const ::IceInternal::Function<void (::Ice::Int)>& __response, const ::IceInternal::Function<void (const ::Ice::Exception&)>& __exception, const ::IceInternal::Function<void (bool)>& __sent);
    
public:
#endif

    ::Ice::AsyncResultPtr begin_add(::Ice::Int __p_num1, ::Ice::Int __p_num2)
    {
        return begin_add(__p_num1, __p_num2, 0, ::IceInternal::__dummyCallback, 0);
    }

    ::Ice::AsyncResultPtr begin_add(::Ice::Int __p_num1, ::Ice::Int __p_num2, const ::Ice::Context& __ctx)
    {
        return begin_add(__p_num1, __p_num2, &__ctx, ::IceInternal::__dummyCallback, 0);
    }

    ::Ice::AsyncResultPtr begin_add(::Ice::Int __p_num1, ::Ice::Int __p_num2, const ::Ice::CallbackPtr& __del, const ::Ice::LocalObjectPtr& __cookie = 0)
    {
        return begin_add(__p_num1, __p_num2, 0, __del, __cookie);
    }

    ::Ice::AsyncResultPtr begin_add(::Ice::Int __p_num1, ::Ice::Int __p_num2, const ::Ice::Context& __ctx, const ::Ice::CallbackPtr& __del, const ::Ice::LocalObjectPtr& __cookie = 0)
    {
        return begin_add(__p_num1, __p_num2, &__ctx, __del, __cookie);
    }

    ::Ice::AsyncResultPtr begin_add(::Ice::Int __p_num1, ::Ice::Int __p_num2, const ::MCal::Callback_Cal_addPtr& __del, const ::Ice::LocalObjectPtr& __cookie = 0)
    {
        return begin_add(__p_num1, __p_num2, 0, __del, __cookie);
    }

    ::Ice::AsyncResultPtr begin_add(::Ice::Int __p_num1, ::Ice::Int __p_num2, const ::Ice::Context& __ctx, const ::MCal::Callback_Cal_addPtr& __del, const ::Ice::LocalObjectPtr& __cookie = 0)
    {
        return begin_add(__p_num1, __p_num2, &__ctx, __del, __cookie);
    }

    ::Ice::Int end_add(const ::Ice::AsyncResultPtr&);
    
private:

    ::Ice::Int add(::Ice::Int, ::Ice::Int, const ::Ice::Context*);
    ::Ice::AsyncResultPtr begin_add(::Ice::Int, ::Ice::Int, const ::Ice::Context*, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& __cookie = 0);
    
public:

    ::Ice::Int sub(::Ice::Int __p_num1, ::Ice::Int __p_num2)
    {
        return sub(__p_num1, __p_num2, 0);
    }
    ::Ice::Int sub(::Ice::Int __p_num1, ::Ice::Int __p_num2, const ::Ice::Context& __ctx)
    {
        return sub(__p_num1, __p_num2, &__ctx);
    }
#ifdef ICE_CPP11
    ::Ice::AsyncResultPtr
    begin_sub(::Ice::Int __p_num1, ::Ice::Int __p_num2, const ::IceInternal::Function<void (::Ice::Int)>& __response, const ::IceInternal::Function<void (const ::Ice::Exception&)>& __exception = ::IceInternal::Function<void (const ::Ice::Exception&)>(), const ::IceInternal::Function<void (bool)>& __sent = ::IceInternal::Function<void (bool)>())
    {
        return __begin_sub(__p_num1, __p_num2, 0, __response, __exception, __sent);
    }
    ::Ice::AsyncResultPtr
    begin_sub(::Ice::Int __p_num1, ::Ice::Int __p_num2, const ::IceInternal::Function<void (const ::Ice::AsyncResultPtr&)>& __completed, const ::IceInternal::Function<void (const ::Ice::AsyncResultPtr&)>& __sent = ::IceInternal::Function<void (const ::Ice::AsyncResultPtr&)>())
    {
        return begin_sub(__p_num1, __p_num2, 0, ::Ice::newCallback(__completed, __sent), 0);
    }
    ::Ice::AsyncResultPtr
    begin_sub(::Ice::Int __p_num1, ::Ice::Int __p_num2, const ::Ice::Context& __ctx, const ::IceI
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值