VS2005配置ICE及写ICE的一个完整的例子

本文介绍如何在VS2005环境下利用ICE 3.3.1实现客户端和服务端之间的远程方法调用。包括ICE环境搭建、接口定义、服务端与客户端代码编写及测试。

开发环境:VS2005 ,Ice 版本 3.3.1

说明:客户端使用ICE远程调用服务器端的方法(printString(string s))

步骤说明:

1、安装Ice 版本 3.3.1

2、设置ICE的环境变量:

ICE_Dir = =<Ice 安装的根目录>

PATH=%ICE_Dir%\bin

设置完变量以后可以在命令行下使用 “slice2cpp”命令检查Ice安装是否成功。

3、编写接口的定义文件“Printer.ice”:内容如下:

   module Demo {

interface Printer {

void printString(string s);

};

};

4、使用slice2cpp命令:slice2cpp <文件目录>\Printer.ice 编译ice文件,执行完该命令会生成Printer.cpp和Printer.h文件。 Printer.cpp文件必须在客户端和服务器端进行编译和链接。(注意:Printer.ice文件不要放在磁盘根目录下,否则会报错)。

5、配置IDE开发环境并建立服务端,因为我自己使用的是VS2005,就简单介绍下VS2005的配置。以服务器建立为例。

1)  新建一个名为“consoleServer”的 Win32 console application工程。并创建 “include”目录和“init.config”文件,init.config文件在初始化ICE时候用到。

2)  添加依赖的头文件和LIB目录和依赖具体lib如下图设置:
2009110710045139.jpg

2009110710051130.jpg2009110710052015.jpg

6、编写并编译服务器端代码 代码如下:

 // consoleTest.cpp : Defines the entry point for the console application.

//

 

#include "stdafx.h"

#include <Ice/Ice.h>

#include <Printer.h>

#include <string>

 

 

using namespace std;

using namespace Demo;

 

 

class PrinterI : public Printer {

public:

    virtual void printString(const string& s,

        const Ice::Current&);

};

 

void PrinterI::printString(const string& s, const Ice::Current&)

{

    cout << s << endl;

}

 

int _tmain(int argc, _TCHAR* argv[])

{

    int status = 0;

    Ice::CommunicatorPtr ic;

    try {

        Ice::InitializationData initData;

        initData.properties = Ice::createProperties();

        initData.properties->load("../include/init.config");

        ic = Ice::initialize(initData);

        //ic = Ice::initialize(argc, argv);

        Ice::ObjectAdapterPtr adapter

            = ic->createObjectAdapterWithEndpoints(

            "SimplePrinterAdapter", "default -p 10000");

        Ice::ObjectPtr object = new PrinterI;

        adapter->add(object,ic->stringToIdentity("SimplePrinter"));

        adapter->activate();

        ic->waitForShutdown();

    } catch (const Ice::Exception& e) {

            cerr << e << endl;

        status = 1;

    } catch (const char* msg) {

        cerr << msg << endl;

        status = 1;

    }

    if (ic) {

        try {

            ic->destroy();

        } catch (const Ice::Exception& e) {

            cerr << e << endl;

            status = 1;

        }

    }

    return status;

}

(注:如果细心你会发现自动生成的Printer.cpp文件没有首行引入“#include "stdafx.h"”头文件,如果进行编译可能出现如下的错误:printer.cpp(373) : fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source?),只要修改该文件的预编译属性为“Create Precompiled Header (/Yc)”即可 如下图所示:
2009110710060580.jpg

7、建立客户端工程

1)   新建一个名为“consoleServer”的 Win32 console application工程。并创建 “include”目录和“init.config”文件,init.config文件在初始化ICE时候用到。

2)第二部同服务器的设置一样

 

8、编写并编译客户端代码 代码如下:

// consoleClient.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include <Ice/Ice.h>

#include <Printer.h>

#include <string>

 

 

using namespace std;

using namespace Demo;

 

 

int _tmain(int argc, _TCHAR* argv[])

{

    int status = 0;

    Ice::CommunicatorPtr ic;//通信器

    try {

 

        Ice::InitializationData initialData;

        initialData.properties = Ice::createProperties();

        initialData.properties->load("../include/init.config");

        ic = Ice::initialize(initialData);

        Ice::ObjectPrx base = ic->stringToProxy("SimplePrinter:default -p 10000");

        PrinterPrx printer = PrinterPrx::checkedCast(base);//接口代理

        if (!printer)

            throw "Invalid proxy";

        printer->printString("Hello World!");

    } catch (const Ice::Exception& ex) {

        cerr << ex << endl;

        status = 1;

    } catch (const char* msg) {

        cerr << msg << endl;

        status = 1;

    }

    if (ic)

        ic->destroy();

 

    return status;

}

 

 

9、测试程序

   记住先启动服务器程序,然后启动客户端程序,否则就会出现如下错误:

Network.cpp:471: Ice::ConnectFailedException:

connect failed: Connection refused

  正常运行的结果为服务器端会打印如下字符串。
2009110710064964.jpg

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值