根据 https://www.ibm.com/developerworks/cn/webservices/ws-xml-rpc/代码修改而来:
XmlRpc 简单代码示例
operations.h:
#ifndef OPERATIONS
#define OPERATIONS
class operations {
public:
int add();
operations(int i,int j);
private :
int op1;
int op2;
};
#endif // OPERATIONS
operations.cpp :
#include <iostream>
#include "operations.h"
int operations::add(){
std::cout<< "Sum of " <<op1<<"+"<<op2<<"="<<op1+op2<<std::endl;
return (op1+op2);
}
operations::operations(int i,int j){
this->op1 = i;
this->op2 = j;
}
myxmlrpcserver.h:
#ifndef MYXMLRPCSERVER
#define MYXMLRPCSERVER
#include <iostream>
#include "myxmlrpcservermethods.h"
#include "XmlRpc.h"
class myXmlRpcServer
{
public:
myXmlRpcServer() ;
~myXmlRpcServer();
void run();
private:
void pm_registerMethods();
XmlRpc::XmlRpcServer pm_xmlRpcserver;
std::list<myXmlRpcServerMethod*> pm_serverMethods;
};
#endif // MYXMLRPCSERVER
myxmlrpcserver.cpp :
#include "myxmlrpcserver.h"
#include <iostream>
myXmlRpcServer::myXmlRpcServer(){
pm_registerMethods();
int port = 8085;
pm_xmlRpcserver.bindAndListen(port);
std::cout<<"XmlRpcServer running in port " << port<<std::endl;
}
myXmlRpcServer::~myXmlRpcServer(){
}
void myXmlRpcServer::pm_registerMethods(){
Add* a = new Add(&pm_xmlRpcserver);
myXmlRpcServerMethod *p=a;
pm_serverMethods.push_back(p);
}
void myXmlRpcServer::run(){
pm_xmlRpcserver.work(-1);
}
myxmlrpcservermethods.h:
#ifndef MYXMLRPCSERVERMETHODS
#define MYXMLRPCSERVERMETHODS
#include <iostream>
#include <XmlRpc.h>
#include "myxmlrpcserver.h"
using namespace XmlRpc;
class myXmlRpcServerMethod : public XmlRpcServerMethod {
public:
myXmlRpcServerMethod(const char *name,XmlRpcServer *server):
XmlRpcServerMethod(name,server){}
virtual void execute(XmlRpcValue ¶ms,XmlRpcValue &result){ }
};
class Add:public myXmlRpcServerMethod{
public:
Add(XmlRpcServer *s);
virtual void execute(XmlRpcValue ¶ms,XmlRpcValue &result);
};
#endif // MYXMLRPCSERVERMETHODS
myxmlrpcservermethods.cpp:
#include <iostream>
#include "myxmlrpcserver.h"
#include <XmlRpc.h>
#include "operations.h"
using namespace std;
using XmlRpc::XmlRpcException;
Add::Add(XmlRpcServer*s) :myXmlRpcServerMethod("Add",s){}
void Add::execute(XmlRpcValue ¶ms, XmlRpcValue &result){
operations a(10,12);
try{
cout<<"Inside Add::execute method\n";
result = a.add();
}catch(std::exception &stde){
throw XmlRpcException(stde.what());
}
}
服务器端:
#include <iostream>
#include "myxmlrpcserver.h"
using std;
int main(int argc ,char *argv[]){
myXmlRpcServer GeeBoomBaa;
std::cout<<"About to run the server\n";
GeeBoomBaa.run();
return 0;
}
客户端:
#include <iostream>
#include "myxmlrpcserver.h"
using namespace XmlRpc;
int main(int argc, char* argv[])
{
const char *server = "localhost";
const int port = 8085;
const char *uri = NULL;
XmlRpcValue args, res;
XmlRpcClient c( server, port, uri);
c.execute("Add", args, res);
std::cout<<"result is "<<res<<std::endl;
}