使用RCF-2200 c++源码实现一个服务端多个客户端要求 1、必须是服务端下发任务给客户端2、客户端在执行任务不下任务给该客户端。给出实现代码
以下是使用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;
}
编译和运行:
-
使用以下命令编译服务端代码:
g++ -o server server.cpp -lRCF -
使用以下命令编译客户端代码:
g++ -o client client.cpp -lRCF -
分别运行服务端和多个客户端:
./server./client可以多次运行客户端以模拟多个客户端同时连接服务端。
注意:在编译和运行之前,需要确保已经正确安装了RCF库,并将RCF头文件和库文件正确地包含在编译命令中
原文地址: http://www.cveoy.top/t/topic/i1V1 著作权归作者所有。请勿转载和采集!