linux下使用gSOAP创建SOAP调用实例

转载自博文:http://blog.csdn.net/ghostyu/article/details/8162280

1.下载安装gSOAP
2.我们不使用WSDL生成头文件,直接自己编写头文件,用来定义接口函数,命名为add.h

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

3.根据.h文件,执行命令,自动生成一些远程调用需要的文件
soapcpp2 -c add.h
4.生成了很多文件,此时可以自己编写添加服务端代码,创建文件:addserver.c

#include "soapH.h"  
#include "ns2.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 <server_port> \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;  
}  
#if 1  
int ns2__add(struct soap *add_soap, int num1, int num2, int *sum)  
{  
    *sum = num1 + num2;  
    return 0;  
}  
#endif  

5.添加客户端代码,创建文件:addclient.c


#include "soapStub.h"
#include "ns2.nsmap"

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;
}

6.写客户端测试代码,创建文件:addtest.c

#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  

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 <ip:port> num1 num2 \n", argv[0]);  
        exit(1);  
    }  

    strcpy(server,argv[1]);  
    num1 = atoi(argv[2]);  
    num2 = atoi(argv[3]);  
    result = add(server, num1, num2,&sum);  

    if (result != 0) {  
        printf("soap error, errcode=%d\n", result);  
    } else {  
        printf("%d + %d = %d\n", num1, num2, sum);  
    }  
    return 0;  
}  

7.编写Makefile,对代码进行编译(注意缩进要用Tab,否则会报错)

GSOAP_ROOT = /root/onvif/gsoap-2.8/gsoap  
CC = gcc -g -DWITH_NONAMESPACES  
INCLUDE = -I$(GSOAP_ROOT)  
SERVER_OBJS = soapC.o stdsoap2.o soapServer.o addserver.o   
CLIENT_OBJS = soapC.o stdsoap2.o soapClient.o addclient.o addtest.o  

all: server  
server: $(SERVER_OBJS)   
    $(CC) $(INCLUDE) -o addserver $(SERVER_OBJS)   

client: $(CLIENT_OBJS)   
    $(CC) $(INCLUDE) -o addtest $(CLIENT_OBJS)  

clean:  
    rm -f *.o addtest  

8.将gsoap-2.8\gsoap目录下的stdsoap2.c和stdsoap2.h复制到当前目录下,它提供了对SOAP协议的简单调用。编译服务端make server得到addserver,编译客户端make client 得到addtest
9.运行测试:
./addserver 1234
./addtest 192.168.1.106:1234 10 20
addserver运行效果
addtest运行效果

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值