以下是使用RCF-2.2.0.0 C++源码实现的一个简单的服务端和多个客户端的例子:

服务端代码(server.cpp):

#include <iostream>
#include <vector>
#include <RCF/RCF.hpp>

class Task
{
public:
    Task() : m_id(0), m_data("") {}
    Task(int id, const std::string& data) : m_id(id), m_data(data) {}

    int getId() const { return m_id; }
    std::string getData() const { return m_data; }

private:
    int m_id;
    std::string m_data;
};

class TaskService
{
public:
    TaskService() : m_nextTaskId(1) {}

    void addTask(const std::string& data)
    {
        Task task(m_nextTaskId++, data);
        m_tasks.push_back(task);
        std::cout << "Added task with ID: " << task.getId() << ", Data: " << task.getData() << std::endl;
    }

    Task getTask()
    {
        if (m_tasks.empty())
        {
            return Task();
        }

        Task task = m_tasks.front();
        m_tasks.erase(m_tasks.begin());
        std::cout << "Sending task with ID: " << task.getId() << ", Data: " << task.getData() << std::endl;
        return task;
    }

private:
    int m_nextTaskId;
    std::vector<Task> m_tasks;
};

RCF_BEGIN(Task, "Task")
    RCF_MEMBER(m_id)
    RCF_MEMBER(m_data)
RCF_END(Task)

RCF_BEGIN(TaskService, "TaskService")
    RCF_METHOD_R1(Task, getTask)
    RCF_METHOD_V1(void, addTask, const std::string&)
RCF_END(TaskService)

int main()
{
    try
    {
        RCF::RcfInitDeinit rcfInit;

        TaskService taskService;

        RCF::RcfServer server(RCF::TcpEndpoint("127.0.0.1", 50001));
        server.bind<TaskService>(taskService);
        server.start();

        std::cout << "Server started." << std::endl;

        std::cin.get();

        server.stop();
    }
    catch (const RCF::Exception& e)
    {
        std::cerr << "Error: " << e.getErrorString() << std::endl;
    }

    return 0;
}

客户端代码(client.cpp):

#include <iostream>
#include <RCF/RCF.hpp>

class Task
{
public:
    Task() : m_id(0), m_data("") {}
    Task(int id, const std::string& data) : m_id(id), m_data(data) {}

    int getId() const { return m_id; }
    std::string getData() const { return m_data; }

private:
    int m_id;
    std::string m_data;
};

RCF_BEGIN(Task, "Task")
    RCF_MEMBER(m_id)
    RCF_MEMBER(m_data)
RCF_END(Task)

int main()
{
    try
    {
        RCF::RcfInitDeinit rcfInit;

        RCF::RcfClient<TaskService> taskService(RCF::TcpEndpoint("127.0.0.1", 50001));

        std::string data;
        std::cout << "Enter task data: ";
        std::getline(std::cin, data);

        taskService.addTask(data);

        Task task = taskService.getTask();
        std::cout << "Received task with ID: " << task.getId() << ", Data: " << task.getData() << std::endl;
    }
    catch (const RCF::Exception& e)
    {
        std::cerr << "Error: " << e.getErrorString() << std::endl;
    }

    return 0;
}

编译和运行:

  1. 使用以下命令编译服务端代码:

    g++ -o server server.cpp -lRCF
    
  2. 使用以下命令编译客户端代码:

    g++ -o client client.cpp -lRCF
    
  3. 分别运行服务端和多个客户端:

    ./server
    
    ./client
    

    可以多次运行客户端以模拟多个客户端同时连接服务端。

注意:在编译和运行之前,需要确保已经正确安装了RCF库,并将RCF头文件和库文件正确地包含在编译命令中

使用RCF-2200 c++源码实现一个服务端多个客户端要求 1、必须是服务端下发任务给客户端2、客户端在执行任务不下任务给该客户端。给出实现代码

原文地址: http://www.cveoy.top/t/topic/i1V1 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录