ICE3.7.2 WIN10 VS2013 创建 “Hello world ” demo

1,下载ice3.7.2 https://zeroc.com/download/Ice/3.7/Ice-3.7.2.msi
2,安装,(其中有一步可以勾选是否添加环境变量,默认勾上)全部下一步。
3,安装完成后环境变量就自动添加好了, 可以看下path中就有了安装的bin目录没,我这里是path:D:\setup\ICE\bin ,还可以再命令框输入slice2cpp -v 验证看是否出现版本号3.7.2
4,由于此版本ice安装完成后不带lib,include等目录,需要自行下载。可以在vs2013的 工具—NuGet程序包管理器—程序管理控制台 中输入 PM> Install-Package zeroc.ice.v120 -Version 3.7.2 进行在线自动下载安装。
5,下载安装好后创建Printer.ice文件
6,在cmd命令框中用slice2cpp Printer.ice命令编译该文件,生成一个Printer.h和一个Printer.cpp文件
7,在VS2013中添加生成的头文件和源文件,再创建server.cpp和client.cpp
8,项目-属性-C/C++ —附加包含目录 中加入自行下载的packages的include目录
9,项目-属性-链接器----常规—附加库目录 中加入packages的lib\win32\debug 目录
10,项目-属性-链接器----常规—附加依赖项 中加入ice37d.lib
11,将Printer.cpp中的用#include “Printer.h” 包含起来。
12,编译生成即可。

以下是代码

//Printer.ice

    module Demo {
    
        interface Printer {

        void printString(string s);

    };

};





//server.cpp
#include<Ice/Ice.h>

#include "Printer.h"

#include <iostream>

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;

}

//注意printString的第二个参数,这里实现可以不用理它,我们之后会讲它的作用。

int main(int argc, char* argv[])

{

	//status用来表示程序退出的状态。

	int status = 0;

	// ic保存的是ice运行时的句柄。

	Ice::CommunicatorPtr ic;

	try

	{

		//这里写服务器实现代码



		//初始化运行时

		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捕捉所有ICE运行时抛出的异常。它的意图是,运行时发生异常时,栈不会崩溃返回到main中打印错误信息。

	catch (const Ice::Exception& e) {

		cerr << e << endl;

		status = 1;

	}

	//第2个catch 捕捉字符串常量。它的意图是,如果我们的代码出现致命错误,我们可以抛出一个带错误信息的字符串,返回到main中打印信息。

	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;
	}








//client.cpp
#include<Ice/Ice.h>
#include "Printer.h"
#include <iostream>
#include <string>

using namespace std;
using namespace Demo;


// 客户端只需要一个main函数,并且代码结构与服务端代码类似
int main(int argc, char * argv[])
{
	int status = 0;
	Ice::CommunicatorPtr ic;
	try{
		// 初始化ICE运行时  1,创建一个通信器
		ic = Ice::initialize(argc, argv);

		//2. 获取通用代理
		Ice::ObjectPrx base = ic->stringToProxy("SimplePrinter:default -p 10000");// SimplePrinter就是服务端的那个ID,后面是服务器的地址
		// 转换为具体代理
		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();
	
	system("pause");
	return status;
	}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ICE-3.7.4 最新安装文件msi文件,windowsICE常见报错 Exception in thread Ice.ConnectionRefusedException error = 0 at IceInternal.Network.doFinishConnect(Network.java:417) at IceInternal.TcpTransceiver.initialize(TcpTransceiver.java:33) at Ice.ConnectionI.initialize(ConnectionI.java:1536) at Ice.ConnectionI.socketReady(ConnectionI.java:1116) at Ice.ConnectionI$SocketReadyCallback.socketReady(ConnectionI.java:2299) at IceInternal.SelectorThread.run(SelectorThread.java:203) at IceInternal.SelectorThread$HelperThread.run(SelectorThread.java:273) Caused by: java.net.ConnectException: Connection refused at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:574) at IceInternal.Network.doFinishConnect(Network.java:393) ... 6 more 这种报错是ICE服务端没有起来,telnet服务端ICE的端口不通,无法建立socke 原帖地址:http://blog.csdn.net/zhenjing/archive/2009/09/10/4538705.aspx ICE常见编译和运行(异常)错误 收藏 在编译和Ice应用相关的文件中,经常因为ice相关的文件包含关系而导致编译无法通过,此时的错误一般提示和handle.h相关。然而想要解决这样的错误,一般只需要把在无法编译成.o文件的.cpp文件中和ice文件相关的头文件放在该.cpp文件的起始行即可。也就是说,根据提示,把.cpp文件中最早提示导致出错的.h文件放在起始行。 ICE的常见运行错误(异常): 1 使用的地址错误,IP并非本地IP: 发生在初始化服务器时,没办法初始化adapter. 错误信息: (IP错误) ./test: Network.cpp:475: Ice::SocketException: socket exception: Cannot assign requestedaddress 另外: 已经启动服务器后又重新启动: 发生在初始化服务器时,没办法初始化adapter. 错误信息: (port已经被使用) ./server: Network.cpp:475:Ice::SocketException: socket exception: Address already in use ///stringtoProxy对于任何string都是有效的,均可以生成相应代理,但是该代理是否有效是无法保证的. 如果代理无效,也就是说根本就没有这样的adapter或者对象,那么使用Checkcast或直接用该代理调用相应对象接口均会抛异常. 下面对每种情况加于分析. 2 使用的代理IP错误: 发生在使用代理调用接口的时候 原因: 根本就没有相应的通讯器存在. 错误信息: (使用的代理IP错误) 抛出异常: Ice::ConnectFailedException(需要几秒, 需要进行搜索) 3 使用的代理端口错误,两边不一致 : 发生在使用代理调用接口的时候 原因: 存在通讯器,但是不存在相应的对象适配器. 错误信息: 抛出异常: Ice::ConnectionRefusedException(很快, 端口没有被启用引起的,无人监听该端口) 4 使用的对象名字不正确: 发生在使用代理调用接口的时候 原因: 能够找到相应的对象适配器,但是该对象适配器中无法找到相应的对象 错误信息: 抛出异常: Ice::ObjectNotExistException(很

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值