您的位置:首页 > 编程语言 > C语言/C++

Zeroc Ice C++小例子

2019-08-16 21:15 3423 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/tangchuanhui/article/details/99685572

初衷是想用C++写一个服务端,在html中嵌入js调用这个服务,但是尝试了很久都没有成功。

先把C++实现服务端和客户端的过程写下来。

一. Ice的安装:

服务端和客户端都需要安装

按照官网上的例子执行命令:https://zeroc.com/downloads/ice#linux

二. 定义Ice接口:

[code]//
// Copyright (c) ZeroC, Inc. All rights reserved.
//

#pragma once

module Demo
{
interface Printer
{
void printString(string s);
}
}

三. 生成Printer.h 和Printer.cpp

[code]slice2cpp Printer.ice

四. 编写Service.cpp

[code]#include <Ice/Ice.h>
#include <Printer.h>

using namespace std;
using namespace Demo;

class PrinterI : public Printer
{
public:
virtual void printString(string s, const Ice::Current&) override;
};

void
PrinterI::printString(string s, const Ice::Current&)
{
cout << s << endl;
}

int
main(int argc, char* argv[])
{
try{
Ice::CommunicatorHolder ich(argc, argv);
//  没有指定ip, 表示接受任何ip的请求
auto adapter = ich->createObjectAdapterWithEndpoints("SimplePrinterAdapter", "tcp -p 10000");
auto servant = make_shared<PrinterI>();
adapter->add(servant, Ice::stringToIdentity("SimplePrinter"));
adapter->activate();
ich->waitForShutdown();
} catch(const std::exception& e) {
cerr << e.what() << endl;
return 1;
}
return 0;
}

五. 编写Client.cpp

[code]#include <Ice/Ice.h>
#include <Printer.h>
#include <stdexcept>

using namespace std;
using namespace Demo;

int
main(int argc, char* argv[])
{
try {
Ice::CommunicatorHolder ich(argc, argv);
// x.x.x.x 是服务端的ip
std::string conn = std::string("SimplePrinter") + ":tcp -h x.x.x.x -p 10000";
auto base = ich->stringToProxy(conn);
//auto base = ich->stringToProxy("SimplePrinter:default -p 10000");
auto printer = Ice::checkedCast<PrinterPrx>(base);
if(!printer) {
throw std::runtime_error("Invalid proxy");
}

printer->printString("Hello World!");
} catch(const std::exception& e) {
cerr << e.what() << endl;
return 1;
}
return 0;
}

六. 编译

[code]在服务器上:
g++ --std=c++11 -I. -DICE_CPP11_MAPPING -c Printer.cpp Server.cpp
g++ --std=c++11 -o Server Printer.o Server.o -lIce++11 -lpthread
在客户端上:
g++ --std=c++11 -I. -DICE_CPP11_MAPPING -c Printer.cpp Client.cpp
g++ --std=c++11 -o Client Printer.o Client.o -lIce++11 -lpthread

七. 运行

./Server

./Client

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: