当前位置:   article > 正文

ICE入门(helloworld)_ice client helloword

ice client helloword

转载请注明原创地址:http://blog.csdn.net/iflychenyang/article/details/8900263

VS2010配置ICE3.4.2

1.首先当然是下载和安装

http://www.zeroc.com/download.html

分别下载了Ice-3.4.2.msi ,IceVisualStudioAddin-3.4.2.1.msi 和Ice-3.4.2-ThirdParty.msi

依次进行了安装;

2.配置环境变量,这个时候文件被安装到了C:\Program Files\ZeroC\Ice-3.4.2\目录下,就是在我的电脑中配置环境变量,

计算机->属性->高级系统设置->环境变量->系统变量->Path中进行添加“;C:\Program Files\ZeroC\Ice-3.4.2\bin\vc100”

这个时候应该就可以在命令行环境下进行测试了

slice2cpp -v

得到的结果应该是

3.4.2

3.新建项目

client和server,如下图所示


4.配置工程依赖项

点击状态栏:Tools->Ice Configuration...,选择Enale Ice Builder,如下图所示:



Hello World~

我们接下来讲的一些都是配置好ICE的基础上实现的。
5.打开VS2010,新建一个项目,命名为“server”,在源文件处添加 新建项,这个时候“已安装的模板”的最下方为“Slice”, 选中它,添加Slice File(.ice) 命名为Printer.ice,内容为:

  1. module Demo{
  2. interface Printer{
  3. void printString(string s);
  4. };
  5. };


6.编译此ice文件,我采用的办法是到对应的目录下,使用命令行来进行编译,编译命令也就是slice2cpp Printer.ice;经过编译,我们得到两个文件Printer.h和Printer.cpp,将这两个文件作为现有项添加到Server项目中,
7.添加一个新的Server.cpp文件,内容是参照Ice 3.4.2的设计文档得到的:

  1. #include <Ice/Ice.h>
  2. #include "Printer.h"
  3. #include <iostream>
  4. using namespace std;
  5. using namespace Demo;
  6. class PrinterI : public Printer
  7. {
  8. public:
  9. virtual void printString(const string &s, const Ice::Current &);
  10. };
  11. void PrinterI ::printString(const string & s, const Ice::Current &)
  12. {
  13. cout<<s<<endl;
  14. }
  15. int main(int argc, char * argv[])
  16. {
  17. int status = 0;
  18. Ice::CommunicatorPtr ic;
  19. try
  20. {
  21. ic = Ice::initialize(argc,argv);
  22. Ice::ObjectAdapterPtr adapter
  23. = ic->createObjectAdapterWithEndpoints("SimplePrinterAdapter","default -p 10000");
  24. Ice::ObjectPtr object = new PrinterI;
  25. adapter->add(object,ic->stringToIdentity("SimplePrinter"));
  26. adapter->activate();
  27. ic->waitForShutdown();
  28. }catch (const Ice::Exception & e)
  29. {
  30. cerr<<e<<endl;
  31. status = 1;
  32. }
  33. catch (const char * msg)
  34. {
  35. cerr<<msg<<endl;
  36. status = 1;
  37. }
  38. if(ic){
  39. try{
  40. ic->destroy();
  41. }
  42. catch(const Ice::Exception & e)
  43. {
  44. cerr<<e<<endl;
  45. status = 1;
  46. }
  47. }
  48. return status;
  49. }

8.这里有个小问题需要注意一下,就是原文中使用的是"#include<Printer.h>",应该改用双引号#include"Printer.h",原因可能是<>到系统指定的一些目录中查找文件,但是“”找的范围更大些。

9.编译此项目,我在第一次编译的时候出了很多问题,原因就是忘了添加附加依赖项,也就出了很多链接无法解析的问题,将iced.lib和iceutild.lib添加进去后,就没有了这些问题。
上面的工作主要用于完成服务器端的任务,而剩下的就是客户端的任务了,
10.首先还是新建一个项目,命名为Client
11.当然其次还是要配置项目的环境属性
12.我在这还是将Server项目下的Printer.h和Printer.cpp复制进了这个新的项目中,而且只复制Printer.h也是有问题的,会出现很多链接无法解析
13.添加Client.cpp文件,内容如下:
  1. #include<Ice/Ice.h>
  2. #include "Printer.h"
  3. #include <iostream>
  4. #include <string>
  5. using namespace std;
  6. using namespace Demo;
  7. int main(int argc, char * argv[])
  8. {
  9. int status = 0;
  10. Ice::CommunicatorPtr ic;
  11. try{
  12. ic = Ice::initialize(argc,argv);
  13. Ice::ObjectPrx base = ic->stringToProxy("SimplePrinter:default -p 10000");
  14. PrinterPrx printer = PrinterPrx::checkedCast(base);
  15. if(!printer)
  16. throw "invalid proxy";
  17. printer->printString("Hello World!");
  18. }
  19. catch(const Ice::Exception& ex)
  20. {
  21. cerr<<ex<<endl;
  22. status = 1;
  23. }
  24. catch (const char* msg)
  25. {
  26. cerr<<msg<<endl;
  27. status = 1;
  28. }
  29. if(ic)
  30. ic->destroy();
  31. return status;
  32. }
14.分别运行server和client
15.Hello World!


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/753398
推荐阅读
相关标签
  

闽ICP备14008679号