linux gsoap 教程,Linux 平台gsoap简单使用

本文详细介绍如何使用gSOAP工具包搭建Web服务的过程,包括下载、编译gSOAP,创建并配置服务端与客户端程序,以及通过Makefile进行编译等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

gsoap下载地址:https://sourceforge.net/projects/gsoap2/?source=typ_redirect

1、编译生成soapcpp2

下载解压之后 跳转gsoap-2.8 目录,执行

./configure

cd gsoap/  执行 make

会在src目录下生成soapcpp2

2、创建test目录

新建add.h 头文件 内容如下

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

cd test

然后我们执行../src/soapcpp2 -c add.h,自动生成一些远程调用需要的文件。如下所示:

0818b9ca8b590ca3270a3433284dd417.png

接下来我们写一个服务端,创建文件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 \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;

}

我们接着写客户端,文件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

#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, &sum);

if (result != 0) {

printf("soap error, errcode=%d\n", result);

} else {

printf("%d + %d = %d\n", num1, num2, sum);

}

return 0;

}

Makefile 文件,注意格式,命令行要以table开始

GSOAP_ROOT = /home/mint/my_work/gsoap/gsoap-2.8/gsoap

WSNAME = add

CC = g++ -g -DWITH_NONAMESPACES

INCLUDE = -I$(GSOAP_ROOT)

SERVER_OBJS = soapC.o stdsoap2.o soapServer.o $(WSNAME)server.o

CLIENT_OBJS = soapC.o stdsoap2.o soapClient.o $(WSNAME)client.o $(WSNAME)test.o

all: server

server: $(SERVER_OBJS)

$(CC) $(INCLUDE) -o $(WSNAME)server $(SERVER_OBJS)

client: $(CLIENT_OBJS)

$(CC) $(INCLUDE) -o $(WSNAME)test $(CLIENT_OBJS)

cl:

rm -f *.o *.xml *.a *.wsdl *.nsmap soapH.h $(WSNAME)Stub.* $(WSNAME)server ns.xsd $(WSNAME)test

注意:编译的时候我们需要gsoap包里的源代码文件,把上层目录下的stdsoap2.c和stdsoap2.h文件拷贝到当前目录

然后我们执行make,即可生产addserver程序;make client,生成addtest程序。

让server跑起来,执行./addserver 6666

0818b9ca8b590ca3270a3433284dd417.png

终端打印出“Socket connection successful: master socket = 3”,那么你的server已经在前台run起来了;

运行客户端,./addtest ip:port num1 num2,返回加法的结果。

0818b9ca8b590ca3270a3433284dd417.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值