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
相关文章推荐
- zeroc ice 客户端与服务端通信例子(c++)
- Zeroc Ice 3.6.1 生成 vs2015 c++ 版本库及相关配置
- Zeroc Ice3.4.2 c++ demo Icestorm之clock
- Zeroc Ice 3.5.1 生成 vs2015 c++ 版本库
- Zeroc Ice 3.4.2 c++ demo之Icegrid simple
- 在C++中结构体为函数参数的例子
- C++ 一个例子彻底搞清楚拷贝构造函数和赋值运算符重载的区别
- C/C++ 线程同步测试例子
- 15 zero ICE SSL
- 几种常见的微服务架构方案简述——ZeroC IceGrid、Spring Cloud、基于消息队列
- c++中的new操作符定位用法(placement new) 的一个例子
- C++练笔例子2
- (转)C++ stringstream介绍,使用方法与例子
- C++ 调用Lua简单例子
- ZeroC Ice 暂记
- C++ 回调函数的简单例子
- ASP.NET Zero--12.一个例子(5)商品分类管理-编辑分类
- c/c++递归、迭代例子
- C++例子
- 学习c++多态的几个小例子