linux下gsoap使用及移植

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Linux下gsoap的使用及移植

1、下载gsoap

在gsoap的官网中可以找到最新的gsoap安装包及相关文档

gsoap官网:/~engelen/soap.html

下载地址:/projects/gsoap2/files/

2、安装gsoap

a、解压zip压缩包

命令:unzip gsoap_2.8.1.zip

b、进入解压后生成的文件夹gsoap-2.8

命令:cd gsoap-2.8/

c、切换到root用户

命令:su

输入密码

d、配置编译环境

在gsoap-2.8/文件夹下执行configure文件,自动配置编译环境

命令:./configure

e、编译连接

命令:make

f、安装gsoap

命令:make install

安装完毕可用wsdl2h或soapcpp2查看gsoap是否已经安装成功

看到上述两个命令的返回说明安装成功

3、应用实例

wsdl2h -o outfile.h infile.wsdl 实现wsdl文件到h文件的数据映射

soapcpp2 -c outfile.h生成相应的底层通信stub,strech程序

首先新建一个文件夹名为gsoap;然后

(1)不使用wsdl2h

a、不使用wsdl2h我们可以直接从.h文件来生成代码。我们先定义一个函数声明文

件,用来定义接口函数,名称为add.h,内容如下:

//gsoapopt cw

//gsoap ns2 schema namespace: urn:add

//gsoap ns2 schema form: unqualified

//gsoap ns2 service name: add

//gsoap ns2 service type: addPortType

//gsoap ns2 service port:/~engelen/addserver.cgi

//gsoap ns2 service namespace: urn:add

//gsoap ns2 service transport: /soap/http

//gsoap ns2 service method-style: add rpc

//gsoap ns2 service method-encoding:

add /soap/encoding/

//gsoap ns2 service method-action: add ""

int ns2__add( int num1, int num2, int* sum );

b、执行soapcpp2 –c add.h,自动生成一些远程调用需要的文件

c、接下来写一个服务端,创建文件addserver.c

#include "add.nsmap"

int main(int argc, char **argv)

{

int m, s;

struct soap add_soap;

soap_init(&add_soap);

soap_set_namespaces(&add_soap, namespaces);

if (argc < 2) {

printf("usage: %s \n", argv[0]);

exit(1);

}

else

{

m = soap_bind(&add_soap, NULL, atoi(argv[1]), 100);

if (m < 0)

{

soap_print_fault(&add_soap, stderr);

exit(-1);

}

fprintf(stderr, "Socket connection successful: master socket = %d\n", m);

for (;;)

{

s = soap_accept(&add_soap);

if (s < 0)

{

soap_print_fault(&add_soap, stderr);

exit(-1);

}

fprintf(stderr, "Socket connection successful: slave socket = %d\n", s);

soap_serve(&add_soap);

soap_end(&add_soap);

}

}

return 0;

}

int ns2__add(struct soap *add_soap, int num1, int num2, int *sum)

{

*sum = num1 + num2;

return 0;

}

d、接着写一个客户端,文件名为addclient.c

#include "soapStub.h"

int add(const char *server, int num1, int num2, int *sum)

{

struct soap add_soap;

int result = 0;

soap_init(&add_soap);

soap_set_namespaces(&add_soap, namespaces);

soap_call_ns2__add(&add_soap, server, NULL, num1, num2, sum);

printf("server is %s, num1 is %d, num2 is %d\n", server, num1, num2);

if (add_soap.error)

{

printf("soap error: %d, %s, %s\n", add_soap.error, *soap_faultcode(&add_soap), *soap_faultstring(&add_soap));

result = add_soap.error;

}

soap_end(&add_soap);

soap_done(&add_soap);

return result;

}

e、最后写一个测试代码,addtest.c

#include

#include

#include

int add(const char *server, int num1, int num2, int *sum);

int main(int argc, char **argv)

{

int result = -1;

char server[128] = {0};

int num1;

int num2;

int sum;

if (argc < 4) {

printf("usage: %s num1 num2 \n", argv[0]);

exit(1);

}

strcpy(server,argv[1]);

num1 = atoi(argv[2]);

num2 = atoi(argv[3]);

result = add(server, num1, num2, ∑);

相关文档
最新文档