VS2005配置ICE及写ICE的一个完整的例子
2013-11-23 14:25
429 查看
开发环境: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如下图设置:
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)”即可 如下图所示:
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
正常运行的结果为服务器端会打印如下字符串。
说明:客户端使用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如下图设置:
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)”即可 如下图所示:
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
正常运行的结果为服务器端会打印如下字符串。
相关文章推荐
- VS2005配置ICE及写ICE的一个完整的例子
- VS2005写ICE的一个完整的例子
- Struts2+Ibatis+Spring.30(完整例子,含3.0事务配置,OSCache缓存配置,JreeChart配置,log4j日志输出Sql,对一个表实现完整的查询,批量删除,添加,更新)
- 基于C#的重构学习(一个完整的小例子)
- (1) 写一个 Properties 格式的配置文件,配置类的完整名称。 * (2) 写一个程序,读取这个 Properties 配置文件,获得类的完整名称并加载这个类,用 反射 的方式运行
- cas sso 配置完整例子
- webpack实战(一):真实项目中一个完整的webpack配置
- tensorflow实战系列(三)一个完整的例子
- 一个完整的Oracle建表的例子
- 一个C#操作RabbitMQ的完整例子
- iBATIS教程 (二)环境的安装和配置,以及一个简单的例子
- structs1.x的配置及一个简单的登陆例子
- 使用Hibernate的一个完整例子
- 一个mybatis配置文件的例子
- 一个使用JdbcTemplate增加一组数据的完整例子
- 一个完整利用InternetOpen等系列函数进行下载的测试例子
- 一个使用tingxml解析XML配置文件的例子
- 一个完整的 epoll + socket 的例子
- WebLogic8.1下配置RMI的一个例子
- 一个关于TableViewer较完整的例子