zeroc ice 客戶端與服務端通訊例子(c++)
zeroc ice 客戶端與服務端通訊例子(c++)
參考 :http://blog.csdn.net/qingen1/article/details/13052139 以及官方文件【Ice 分散式程式設計】
export ICE_HOME=/usr
1. Printer.ice
[root@linuxice ~]# cat Printer.ice
module Demo
{
interface Printer
{
void printString(string s);
};
};
2. slice2cpp Printer.ice
生成檔案:Printer.cpp Printer.h
3. Server.cpp
#include <Ice/Ice.h>
#include <Printer.h>
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 main(int argc, char* argv[])
{
int status = 0;
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,Ice::stringToIdentity("SimplePrinter"));
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)
ic->destroy();
return status;
}
4. 編譯服務端程式碼。在編譯和連線時需要指定ICE標頭檔案和動態連結庫的位置
c++ -I. -I$ICE_HOME/include -c Printer.cpp Server.cpp
c++ -o server Printer.o Server.o -L$ICE_HOME/lib -lIce -lIceUtil
[root@linuxice ~]# c++ -I. -I$ICE_HOME/include -c Printer.cpp Server.cpp
[root@linuxice ~]#
[root@linuxice ~]#
[root@linuxice ~]#
[root@linuxice ~]# ls -tl |head
total 512
-rw-r--r-- 1 root root 62640 Jul 6 13:46 Server.o
-rw-r--r-- 1 root root 291472 Jul 6 13:46 Printer.o
-rw-r--r-- 1 root root 901 Jul 6 13:46 Server.cpp
-rw-r--r-- 1 root root 10235 Jul 6 11:55 Printer.cpp
[root@linuxice ~]# c++ -o server Printer.o Server.o -L$ICE_HOME/lib -lIce -lIceUtil
[root@linuxice ~]#
[root@linuxice ~]# ls -tl |head
total 704
-rwxr-xr-x 1 root root 193708 Jul 6 13:50 server
-rw-r--r-- 1 root root 62640 Jul 6 13:46 Server.o
-rw-r--r-- 1 root root 291472 Jul 6 13:46 Printer.o
-rw-r--r-- 1 root root 901 Jul 6 13:46 Server.cpp
-rw-r--r-- 1 root root 10235 Jul 6 11:55 Printer.cpp
5. Client.cpp檔案
#include <Ice/Ice.h>
#include <Printer.h>
using namespace std;
using namespace Demo;
// 客戶端只需要一個main函式,並且程式碼結構與服務端程式碼類似
int main(int argc, char* argv[])
{
int status = 0;
Ice::CommunicatorPtr ic;
try {
// 初始化ICE執行時
ic = Ice::initialize(argc, argv);
//ObjectPrx 在客戶端代理伺服器端
Ice::ObjectPrx base = ic->stringToProxy("SimplePrinter:tcp -p 10000");
PrinterPrx printer =PrinterPrx::checkedCast(base);
if (!printer)
throw "Invalid proxy";
// 呼叫Printer物件代理的printString方法。呼叫將會通過物件代理被髮送到服務端
printer->printString("HelloWorld!");
} 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;
}
同上邊的執行內容 :
c++ -I. -I$ICE_HOME/include -c Printer.cpp Client.cpp
c++ -o client Printer.o Client.o -L$ICE_HOME/lib -lIce -lIceUtil
[root@linuxice ~]# c++ -I. -I$ICE_HOME/include -c Printer.cpp Client.cpp
[root@linuxice ~]#
[root@linuxice ~]# ls -tl |head
total 776
-rw-r--r-- 1 root root 64600 Jul 6 14:12 Client.o
-rw-r--r-- 1 root root 291472 Jul 6 14:12 Printer.o
-rw-r--r-- 1 root root 827 Jul 6 14:10 Client.cpp
drwxr-xr-x 2 root root 4096 Jul 6 13:56 cl
-rwxr-xr-x 1 root root 193708 Jul 6 13:50 server
-rw-r--r-- 1 root root 62640 Jul 6 13:46 Server.o
-rw-r--r-- 1 root root 901 Jul 6 13:46 Server.cpp
-rw-r--r-- 1 root root 10235 Jul 6 11:55 Printer.cpp
-rw-r--r-- 1 root root 17540 Jul 6 11:55 Printer.h
c++ -o client Printer.o Client.o -L$ICE_HOME/lib -lIce -lIceUtil
[root@linuxice ~]# ls -tl |head
total 964
-rwxr-xr-x 1 root root 190836 Jul 6 14:14 client
-rw-r--r-- 1 root root 64600 Jul 6 14:12 Client.o
-rw-r--r-- 1 root root 291472 Jul 6 14:12 Printer.o
-rw-r--r-- 1 root root 827 Jul 6 14:10 Client.cpp
drwxr-xr-x 2 root root 4096 Jul 6 13:56 cl
-rwxr-xr-x 1 root root 193708 Jul 6 13:50 server
-rw-r--r-- 1 root root 62640 Jul 6 13:46 Server.o
-rw-r--r-- 1 root root 901 Jul 6 13:46 Server.cpp
-rw-r--r-- 1 root root 10235 Jul 6 11:55 Printer.cpp
6. 驗證
crt視窗1執行:
[root@linuxice ~]# ./server
crt視窗2執行:
[root@linuxice ~]# ./client
crt視窗1顯示:
[root@linuxice ~]# ./server
HelloWorld!
備註:之前的過程 的通訊方式和細的東西再體會。
相關文章
- binder通訊例項之c++客戶端與c++服務端C++客戶端服務端
- 實現客戶端與服務端的HTTP通訊客戶端服務端HTTP
- 客戶端與服務端Socket通訊原理詳解客戶端服務端
- android binder c++層-客戶端(c++) 呼叫 服務端(c++) 例子AndroidC++客戶端服務端
- Socket最簡單的客戶端與服務端通訊-Java客戶端服務端Java
- 【2】Windows C++ Redis服務端搭建與客戶端開發WindowsC++Redis服務端客戶端
- Android 客戶端與PC服務端socket通訊接收與傳送圖片(終結者)Android客戶端服務端
- js 客戶端與伺服器端的通訊JS客戶端伺服器
- .Net Remoting服務端與客戶端呼叫示例REM服務端客戶端
- Android實現Thrift服務端與客戶端Android服務端客戶端
- SSLSocket實現服務端和客戶端雙向認證的例子服務端客戶端
- TCP/UDP簡易通訊框架原始碼,支援輕鬆管理多個TCP服務端(客戶端)、UDP客戶端TCPUDP框架原始碼服務端客戶端
- PHP-Socket服務端客戶端傳送接收通訊例項詳解PHP服務端客戶端
- 模板,從服務端到客戶端服務端客戶端
- 服務端渲染和客戶端渲染服務端客戶端
- 求一段python3服務端及客戶端的例子Python服務端客戶端
- TCP通訊客戶端和服務端簡單程式碼實現TCP客戶端服務端
- Java review--NIO例項:實現服務端和客戶端的簡單通訊JavaView服務端客戶端
- SimpleRpc-客戶端與服務端工作模型探討RPC客戶端服務端模型
- ZooKeeper服務發現客戶端客戶端
- OSSEC服務端配置客戶端批次部署方案服務端客戶端
- python建立tcp服務端和客戶端PythonTCP服務端客戶端
- golang實現tcp客戶端服務端程式GolangTCP客戶端服務端
- 基於node的tcp客戶端和服務端的簡單通訊TCP客戶端服務端
- Go gRPC 系列二:一元客戶端與服務端GoRPC客戶端服務端
- android客戶端與服務端互動的三種方式Android客戶端服務端
- Java的oauth2.0 服務端與客戶端的實現JavaOAuth服務端客戶端
- AgileEAS.NET SOA 中介軟體平臺.Net Socket通訊框架-簡單例子-實現簡單的服務端客戶端訊息應答框架單例服務端客戶端
- macOS 自帶的ftp服務端&vnc客戶端MacFTP服務端VNC客戶端
- MQTT伺服器搭建服務端和客戶端MQQT伺服器服務端客戶端
- Rest Post示例(java服務端、python客戶端)RESTJava服務端Python客戶端
- 使用多種客戶端消費WCF RestFul服務(一)——服務端客戶端REST服務端
- Spring Boot 整合 WebSocket 實現服務端推送訊息到客戶端Spring BootWeb服務端客戶端
- PC客戶端安全測試服務客戶端
- php原生socket實現客戶端與服務端資料傳輸PHP客戶端服務端
- 客戶端到伺服器端的通訊過程客戶端伺服器
- Redis:我是如何與客戶端進行通訊的Redis客戶端
- 客戶端與服務端的三次握手與四次揮手客戶端服務端