VC中使用XMLRPC

我目前的工作任务是使用XMLRPC实现与其他系统的接口。以前没有用过XMLRPC。两天半时间才搞定。把步骤记录下来以备以后参考。

首先从XMLRPC官网http://www.xmlrpc.com/,或者http://sourceforge.net/projects/xmlrpcpp/网站下载XMLRPC++0.7。解压。

1.熟悉XMLRPC

可以运行xmlrpc.dsw工程中的的例子。阅读HelloServer、HelloClient工程的源码,可以大概了解XMLRPC如何使用。

2. 传递结构体的例子

创建client工程,类型为Win32 Console Application。

将src文件夹、xmlrpc.dsp文件复制到client工程目录下。

并将xmlrpc.dsp添加到自己的工作空间中。

在Project->settings->c/c++->Category->Preprocesser->Additional include directions添加xmlrpc.lib的头文件路径“src”。

在Project->settings->Link->Category->General->Object/Library Modules中添加xmlrpc.lib Ws2_32.lib两个lib,

在Project->settings->Link->Category->Input->Additional Library path中添加xmlrpc.lib所在路径“debug”。

可以在Project->settings->Debug->Program arguments中添加程序参数,本例为端口“9000”。

并将Project->settings->c/c++->Category->Code Generation->Use Run time Library 修改为MultiThreaded DLL或者Debug MultiThreaded DLL。

参照xmlrpc自带例子,写出传递结构体的文件如下:

#include "stdafx.h"
#include "XmlRpc.h"
#include <iostream>
using namespace XmlRpc;

int main(int argc, char* argv[])
{
if (argc != 3) {
std::cerr << "Usage: HelloClient serverHost serverPort\n";
return -1;
}
int port = atoi(argv[2]);

// Use introspection API to look up the supported methods
XmlRpcClient c(argv[1], port);
//liuling
XmlRpcValue arg, result;

arg["a"] = "Hello";
arg["b"] = 20.5;

XmlRpcValue arg2;
arg2[0]=arg;
std::cout << arg2.toXml() << std::endl;


if (c.execute("HelloWorld", arg2, result))


std::cout << "Hello World method c: " << result[0]["c"] << " d:" << result[0]["d"] << "\n\n";
else
std::cout << "Error calling 'HelloWorld'\n\n";

return 0;
}

创建server工程,工程设置参考client。

#include "stdafx.h"
#include "XmlRpc.h"
#include <iostream>
#include <stdlib.h>

using namespace XmlRpc;

// The server
XmlRpcServer s;

// No arguments, result is "Hello".
class HelloWorld : public XmlRpcServerMethod
{
public:
HelloWorld(XmlRpcServer* s) : XmlRpcServerMethod("HelloWorld", s) {}

void execute(XmlRpcValue& params, XmlRpcValue& result)
{
//std::cout << params.toXml();
//std::cout << "params.size():" << params.size() << std::endl;
//result["c"] = ( std::string( params["a"] ) + std::string( params["b"] ) );
//int x=params;
double b = double( params[0]["b"] );
std::cout << "Hello World a:" << std::string( params[0]["a"] ) << "b:" << b << std::endl;
result[0]["c"] = std::string( params[0]["a"] );
result[0]["d"] = b * 2;
}

std::string help() { return std::string("Say hello"); }

} helloworld(&s); // This constructor registers the method with the server


int main(int argc, char* argv[])
{
XmlRpcLogHandler::setVerbosity(1000);
if (argc != 2) {
std::cerr << "Usage: HelloServer serverPort\n";
return -1;
}
int port = atoi(argv[1]);

XmlRpc::setVerbosity(5);

// Create the server socket on the specified port
s.bindAndListen(port);

// Enable introspection
s.enableIntrospection(true);

// Wait for requests indefinitely
s.work(-1.0);

return 0;
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值