soap测试程序 及项目建立过程

soap测试程序 及项目建立过程

环境: ubuntu ,编译的支持ssl的gsoap

参考博客

https://blog.csdn.net/dgyanyong/article/details/39925523

项目文件列表(完成编译的完整项目)

sxy@sxy-pc:~/project/test_soap$ ls
add.add.req.xml  addserver    Makefile         soapH.h          stdsoap2.h
add.add.res.xml  addserver.c  soapC.c          soapServer.c     stdsoap2.o
addclient.c      addserver.o  soapClient.c     soapServerLib.c
addclient.o      addtest      soapClientLib.c  soapServer.o
add.h            addtest.c    soapClient.o     soapStub.h
add.nsmap        addtest.o    soapC.o          stdsoap2.c

项目建立过程

  • add.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:http://websrv.cs.fsu.edu/~engelen/addserver.cgi  
//gsoap ns2 service namespace: urn:add  
//gsoap ns2 service transport: http://schemas.xmlsoap.org/soap/http  
//gsoap ns2  service method-style:      add rpc  
//gsoap ns2  service method-encoding:   add http://schemas.xmlsoap.org/soap/encoding/  
//gsoap ns2  service method-action:     add ""  
int ns2__add( int num1, int num2, int* sum );  
  • 执行命令行
soapcpp2 -c add.h

执行后文件目录多了许多文件

sxy@sxy-pc:~/project/test_soap$ ls
add.add.req.xml  add.h      soapC.c       soapClientLib.c  soapServer.c     soapStub.h
add.add.res.xml  add.nsmap  soapClient.c  soapH.h          soapServerLib.c
  • addserver.c
#include "soapH.h"  
#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 <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
  • addclient.c

#include "soapStub.h"  
#include "add.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;  
}  
  • 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;  
}  
  • Makefile
    注意将makefile中的gsoap目录更改为自己方的位置
    将gsoap-2.8\gsoap目录下的stdsoap2.c和stdsoap2.h复制到项目文件夹下
    执行make指令时,可能会出现错误,把$(CC)…行前的空格删除,再使用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 
  • make
    分别编译服务器和客户端
make server
make client
  • 测试程序
    在一个窗口输入
./addserver 1234

在另一个窗口输入,注意网址需要根据自己的电脑进行设置

./addtest 192.168.0.101:1234 12 43

测试结果
服务器

sxy@sxy-pc:~/project/test_soap$ ./addserver 1234
Socket connection successful: master socket = 3
Socket connection successful: slave socket = 4

客户端

sxy@sxy-pc:~/project/test_soap$ ./addtest 192.168.0.101:1234 12 43
server is 192.168.0.101:1234, num1 is 12, num2 is 43/n12 + 43 = 55
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值