// echo.h
class Echo : public GlobaleScope
{
public:
BEGIN_RPC_ADD_MF(Echo)
RPC_ADD_MF(echo)
END_RPC_ADD_MF()
// 3rd macro param is ';' means non-pure-virtual
RPC_DECLARE_MF_EX(echo, (const std::string& msg, std::string* y), ;)
};
RPC_TYPEDEF_PTR(Echo);
// echo_server.cpp
#include <stdio.h>
#include <febird/rpc/server.h>
#include <febird/io/SocketStream.h>
#include <iostream>
using namespace std;
using namespace febird;
using namespace febird::rpc;
#include "../echo.h"
rpc_return_t Echo::echo(const std::string& msg, std::string* y)
{
cout << "input: " << msg << endl;
*y = "server: " + msg;
return 0;
}
int main(int argc, char** argv[])
{
#ifdef _WIN32
WSADATA information;
WSAStartup(MAKEWORD(2, 2), &information);
#endif
try {
SocketAcceptor acceptor("0.0.0.0:8001");
rpc_server<PortableDataInput, PortableDataOutput> server(&acceptor);
// 加入命名的 Servant
server.add_servant(
new Echo,
"echo",
0 // 0 will not auto create GlobaleScope Object
);
server.start();
}
catch (const std::exception& exp)
{
printf("exception: what=%s\n", exp.what());
}
#ifdef _WIN32
WSACleanup();
#endif
return 0;
}
// echo_client.cpp
#include <stdio.h>
#include <febird/rpc/client.h>
#include <febird/io/SocketStream.h>
#include <iostream>
using namespace std;
using namespace febird;
using namespace febird::rpc;
#include "../echo.h"
int main(int argc, char** argv[])
{
#ifdef _WIN32
WSADATA information;
WSAStartup(MAKEWORD(2, 2), &information);
#endif
try {
auto_ptr<SocketStream> cs(ConnectSocket("127.0.0.1:8001"));
rpc_client<PortableDataInput, PortableDataOutput> client(cs.get());
EchoPtr ec;
client.create(ec, "echo");
while (!cin.eof())
{
string msg, y;
cin >> msg;
ec->echo(msg, &y);
cout << "msg:" << msg << endl;
cout << "y__:" << y << endl;
}
}
catch (const std::exception& exp)
{
printf("exception: what=%s\n", exp.what());
}
#ifdef _WIN32
WSACleanup();
#endif
return 0;
}
分享到:
相关推荐
febird.rpc is a C++ remote procedure call without an IDL supporting, it based on the serialization framework. febird.rpc provide convenient usage and fast performance, and an uniform coding style. ...
远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
pre_o_1csdn63m9a1bs0e1rr51niuu33e.a
matlab建立计算力学课程的笔记和文件.zip
FT_Prog_v3.12.38.643--FTD USB 工作模式设定及eprom读写
matlab基于RRT和人工势场法混合算法的路径规划.zip
matlab基于matlab的两步定位软件定义接收机的开源GNSS直接位置估计插件模块.zip
office 2016三和一精简版
文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
麦肯锡咨询顾问必备宝典-时间管理.ppt
文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
麦肯锡顾问的黄金思考方法.pptx
91fdd461elb59a4ce8dfcfc46bc283a7.msi
ansys maxwell
5-5
xx广告促销计划流程实施手册.ppt
仿小米商城微信小程序源码+项目说明.zip
文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
麦肯锡xx客户满意服务.ppt