// 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. ...
而`ContextExampleClient`则是客户端代码,用于发起RPC调用,包装参数并处理服务器返回的结果。 通过分析这些文件,我们可以深入理解RPC的工作原理,包括如何定义服务接口,如何序列化和反序列化数据,以及如何实现...
小红薯电商实操课小红书开店实操必学课.mp4
AI图像处理工具包-一键抠图、背景切换、旧照片修复、人像漫画化、视频卡通化(Python+OpenCV+Dlib+TensorFlow).zip [资源说明] 1、该项目是团队成员近期最新开发,代码完整,资料齐全,含设计文档等 2、上传的项目源码经过严格测试,功能完善且能正常运行,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的高校学生、教师、科研工作者、行业从业者下载使用,可借鉴学习,也可直接作为毕业设计、课程设计、作业、项目初期立项演示等,也适合小白学习进阶,遇到问题不懂就问,欢迎交流。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 5、不懂配置和运行,可远程教学 欢迎下载,学习使用!
基于java的新能源充电系统设计与实现.docx
吸波材料建模单元周期仿真模拟,参数优化,计算反射损耗,极化角,入射角,等效阻抗等
AGV调度系统的仿真平台(含源码+项目说明+实验结果分析).zip [资源说明] 1、该项目是团队成员近期最新开发,代码完整,资料齐全,含设计文档等 2、上传的项目源码经过严格测试,功能完善且能正常运行,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的高校学生、教师、科研工作者、行业从业者下载使用,可借鉴学习,也可直接作为毕业设计、课程设计、作业、项目初期立项演示等,也适合小白学习进阶,遇到问题不懂就问,欢迎交流。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 5、不懂配置和运行,可远程教学 欢迎下载,学习使用!
【本体】Internet Download Manager v6.42.26.zip
NLP中文垃圾短信分类系统源码+设计全部资料+文档报告(自然语言处理课设).zip [资源说明] 1、该项目是团队成员近期最新开发,代码完整,资料齐全,含设计文档等 2、上传的项目源码经过严格测试,功能完善且能正常运行,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的高校学生、教师、科研工作者、行业从业者下载使用,可借鉴学习,也可直接作为毕业设计、课程设计、作业、项目初期立项演示等,也适合小白学习进阶,遇到问题不懂就问,欢迎交流。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 5、不懂配置和运行,可远程教学 欢迎下载,学习使用!
Python大作业封面.doc
基于Android Studio开发的安卓的记事本app项目源码(高分期末大作业),个人经导师指导并认可通过的毕业设计项目,评审分98分,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 基于Android Studio开发的安卓的记事本app项目源码(高分期末大作业)基于Android Studio开发的安卓的记事本app项目源码(高分期末大作业)基于Android Studio开发的安卓的记事本app项目源码(高分期末大作业)基于Android Studio开发的安卓的记事本app项目源码(高分期末大作业)基于Android Studio开发的安卓的记事本app项目源码(高分期末大作业)基于Android Studio开发的安卓的记事本app项目源码(高分期末大作业)基于Android Studio开发的安卓的记事本app项目源码(高分期末大作业)基于Android Studio开
操作系统课后题参考答案
几何图霸软件是一个非常强大的三维几何图形绘制工具,可以根据约束条件绘制标准示意图,写相关技术类文章需要绘图时很适用。
《写给大众的健康饮食指南》.mp4
智能相册Piktures v2.19 build 815 for 高级版.mp4
建行开养老金必中58元微信立减金亲测.mp4
Converter视频音频转换器v2.2.5.2解锁VIP版.mp4
车来了v4.59.0高级版 精准实时公交地铁神器.mp4
基于java的招生宣传管理系统设计与实现.docx