栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c++ RMI demo(使用RCF库)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c++ RMI demo(使用RCF库)

作业要求

下载RCF库并编译成静态库/动态库
宿主机操作系统:ubuntu

wget https://www.deltavsoft.com/downloads/RCF-3.2.413.tar.gz # 下载RCF压缩包
tar xvf RCF-3.2.413.tar.gz # 解压到本地文件夹

在/root/code/rcf/RCF-3.2.413文件夹下

g++ -I include/  src/RCF/RCF.cpp -lpthread -ldl -luuid -c # 生成obj文件
# -l:链接第三方库 -I:头文件目录  -c只进行 预处理, 编译,汇编操作,生成.o (.obj)文件,不进行链接。

报错fatal error: uuid/uuid.h: No such file or directory
sudo apt-get install uuid-dev # 安装uuid-devuuid-dev
# 重新运行g++命令成功
mkdir lib # 创建lib文件夹,存放静态库与动态库文件

# 生成静态库
# 将所有.o文件打包为静态库,r将文件插入静态库中,c创建静态库,不管库是否存在,s写入一个目标文件索引到库中
ar rcs librcf.a  RCF.o 
mv librcf.a  lib/
mv RCF.o  lib/RCF_static.o


# 生成动态库
g++ -I include/  src/RCF/RCF.cpp -lpthread -ldl -luuid -c -fPIC 	# 参数-fPIC表示生成与位置无关代码
g++ -shared -o librcf.so RCF.o
mv librcf.so  lib/
mv RCF.o  lib/RCF_share.o

仿照/root/code/rcf/RCF-3.2.413/demo文件夹下的demo编写RMI程序

// interface.h
#pragma once
#include 
#include 

RCF_BEGIN(I_Translate, "I_Translate")
RCF_METHOD_R1(std::string, Translate, const std::string &);
RCF_END(I_Translate);

// server.cpp
#include 
#include 
#include 

#include "interface.h"

class Translator
{
  public:
    std::string Translate(const std::string &str)
    {
        if(word_list_.count(str)!=0){
            return  word_list_[str];
        }
        return {};
    }
    void InsertSampleData()
    {
        word_list_.insert({"Afghanistan", "阿富汗"});
        word_list_.insert({"Denmark", "丹麦"});
        word_list_.insert({"Egypt", "埃及"});
        word_list_.insert({"Finland", "芬兰"});
        word_list_.insert({"Korea (South)", "韩国"});
        word_list_.insert({"Kuwait", "科威特"});
    }

  private:
    std::map word_list_;
};

int main()
{
    RCF::RcfInit rcfInit;

    std::string networkInterface = "0.0.0.0";
    int port = 50001;
    std::cout << "Starting server on " << networkInterface << ":" << port << "." << std::endl;

    // Start a TCP server, and expose DemoService.
    Translator translator;
    translator.InsertSampleData();
    RCF::RcfServer server(RCF::TcpEndpoint(networkInterface, port));
    server.bind(translator);
    server.start();

    std::cout << "Press Enter to exit..." << std::endl;
    std::cin.get();

    return 0;
}

// client.cpp
#include 
#include 

#include "interface.h"

int main()
{
    RCF::RcfInit rcfInit;

    try
    {

        std::string networkInterface = "127.0.0.1";
        int port = 50001;
        std::cout << "Connecting to server on " << networkInterface << ":" << port << "." << std::endl;

        // Make the call.
        auto remotes_obj = RcfClient(RCF::TcpEndpoint(networkInterface, port));
        std::string input_string;
        std::string translate_res;
        while (true)
        {
            std::cout << "输入需要查询的英文单词,按q结束查询" << std::endl;
            std::cin >> input_string;
            if (input_string == "q")
            {
                break;
            }
            translate_res = remotes_obj.Translate(input_string).get();
            if (translate_res == "")
            {
                std::cout << "词汇表中未存该单词" << std::endl;
            }
            else
            {
                std::cout << translate_res << std::endl;
            }
        }
    }
    catch (const RCF::Exception &e)
    {
        std::cout << "Caught exception:n";
        std::cout << e.getErrorMessage() << std::endl;
        return 1;
    }

    return 0;
}

编译运行

# 使用静态库
g++ client.cpp   /root/code/rcf/RCF-3.2.413/lib/librcf.a  -I /root/code/rcf/RCF-3.2.413/include/ -o client_static -lpthread -ldl -luuid
g++ server.cpp   /root/code/rcf/RCF-3.2.413/lib/librcf.a  -I /root/code/rcf/RCF-3.2.413/include/ -o server_static -lpthread -ldl -luuid


# 使用动态库
g++ client.cpp   /root/code/rcf/RCF-3.2.413/lib/librcf.so  -I /root/code/rcf/RCF-3.2.413/include/ -o client_share -lpthread -ldl -luuid
g++ server.cpp   /root/code/rcf/RCF-3.2.413/lib/librcf.so  -I /root/code/rcf/RCF-3.2.413/include/ -o server_share -lpthread -ldl -luuid


参考博客
RCF的使用
Linux基础——gcc编译、静态库与动态库(共享库)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/861798.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号