日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux下用gSOAP开发Web Service服务端和客户端程序(一)

發(fā)布時(shí)間:2025/3/21 linux 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux下用gSOAP开发Web Service服务端和客户端程序(一) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、功能說明:

?????? 要開發(fā)的Web Service功能非常簡單,就是一個(gè)add函數(shù),將兩個(gè)參數(shù)相加,返回其和。

?

2、C版本的程序:

(1)頭文件:SmsWBS.h,注釋部分不可少,url部分的IP必須填寫當(dāng)前Linux電腦的IP

//gsoap ns service name: SmsWBS
//gsoap ns service style: rpc
//gsoap ns service namespace:?http://192.168.2.161:9000/SmsWBS.wsdl
//gsoap ns service location:?http://192.168.2.161:9000
//gsoap ns service encoding: encoded
//gsoap ns schema namespace: urn:SmsWBS

int ns__add(int num1, int num2, int *sum);
這個(gè)頭文件需要注意的是,前面的 // 部分是有意義的,可以在上面修改,如果完全去掉,將會(huì)導(dǎo)致生成的中間文件不同,由此會(huì)引起要修改Makefile文件???????????????????????????????????????????

(2)Makefile文件:

比較關(guān)鍵,如果頭文件中的 // 部分有修改,要檢查是否要修改Makefile文件

GSOAP_ROOT=/usr/local/gSOAP
WSNAME0=soap
WSNAME=SmsWBS
CC=g++ -g -DWITH_NONAMESPACES
INCLUDE=-I $(GSOAP_ROOT)/include
SERVER_OBJS=$(WSNAME0)C.o $(WSNAME0)Server.o stdsoap2.o
CLIENT_OBJS=$(GSOAP_ROOT)/env/envC.o $(WSNAME0)ClientLib.o stdsoap2.o
ALL_OBJS=${WSNAME}server.o $(WSNAME0)C.o $(WSNAME0)Server.o ${WSNAME}test.o $(WSNAME0)ClientLib.o
#GSOAP_SRC=/usr/local/gsoap-2.7/gsoap

all:server

${WSNAME}.wsdl:${WSNAME}.h
??????? $(GSOAP_ROOT)/bin/soapcpp2 -c $(GSOAP_ROOT)/import ${WSNAME}.h

stdsoap2.o:$(GSOAP_ROOT)/src/stdsoap2.c
??????? $(CC) -c $? $(INCLUDE)

$(ALL_OBJS):%.o:%.c
??????? $(CC) -c $? $(INCLUDE)

server:Makefile ${WSNAME}.wsdl ${WSNAME}server.o $(SERVER_OBJS)
??????? $(CC) ${WSNAME}server.o $(SERVER_OBJS) -o ${WSNAME}server

client:Makefile ${WSNAME}.wsdl ${WSNAME}test.c $(ALL_OBJS) stdsoap2.o
??????? $(CC) ${WSNAME}test.o $(CLIENT_OBJS) -o ${WSNAME}test

clean:
??????? rm -f *.o *.xml *.a *.wsdl *.nsmap $(WSNAME0)H.h $(WSNAME0)C.c $(WSNAME0)Server.c $(WSNAME0)Client.c $(WSNAME0)Stub.* $(WSNAME)$(WSNAME)Proxy.* $(WSNAME)$(WSNAME)Object.* $(WSNAME0)ServerLib.c $(WSNAME0)ClientLib.c $(WSNAME)server ns.xsd $(WSNAME)test

?

(3)服務(wù)端程序SmsWBSserver.c:

#include "soapH.h"
#include "SmsWBS.nsmap"

int main(int argc, char **argv)
{
??????? int m, s;?????????????? /* master and slave sockets */
??????? struct soap SmsWBS_soap;

??????? soap_init(&SmsWBS_soap);

??????? soap_set_namespaces(&SmsWBS_soap, namespaces);

??????? if (argc < 2)
??????? {
??????????????? printf("usage: %s <server_port> \n", argv[0]);
??????????????? exit(1);
??????? }
??????? else
??????? {
??????????????? m = soap_bind(&SmsWBS_soap, NULL, atoi(argv[1]), 100);
??????????????? if (m < 0)
??????????????? {
??????????????????????? soap_print_fault(&SmsWBS_soap, stderr);
??????????????????????? exit(-1);
??????????????? }

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

??????????????? for (;;)
??????????????? {
??????????????????????? s = soap_accept(&SmsWBS_soap);

??????????????????????? if (s < 0)
??????????????????????? {
??????????????????????????????? soap_print_fault(&SmsWBS_soap, stderr);
??????????????????????????????? exit(-1);
??????????????????????? }

??????????????????????? fprintf(stderr, "Socket connection successful: slave socket = %d\n", s);
??????????????????????? soap_serve(&SmsWBS_soap);
??????????????????????? soap_end(&SmsWBS_soap);
??????????????? }

?????? }

??????? return 0;
}

int ns__add(struct soap *add_soap, int num1, int num2, int *sum)
{
??????? *sum = num1 + num2;
??????? return 0;
}

?

(4)客戶端程序SmsWBStest.c:

#include <stdio.h>
#include <stdlib.h>
#include "soapStub.h"
#include "SmsWBS.nsmap"

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

int add(const char *server, int num1, int num2, int *sum)
{
??????? struct soap SmsWBS_soap;
??????? int result = 0;

??????? soap_init(&SmsWBS_soap);
??????? soap_set_namespaces(&SmsWBS_soap, namespaces);

??????? soap_call_ns__add(&SmsWBS_soap, server, "", num1, num2, sum);

??????? if(SmsWBS_soap.error)
??????? {
??????????????? printf("soap error:%d, %s, %s ", SmsWBS_soap.error, *soap_faultcode(&SmsWBS_soap), *soap_faultstring(&SmsWBS_soap));
??????????????? result = SmsWBS_soap.error;
???????? }

??????? soap_end(&SmsWBS_soap);
??????? soap_done(&SmsWBS_soap);

??????? return result;
}

int main(int argc, char **argv)
{
??????? int result = -1;
??????? char* server="http://localhost:9000";

??????? int num1 = 0;
??????? int num2 = 0;
??????? int sum = 0;

??????? if( argc < 3 )
??????? {
??????????????? printf("usage: %s num1 num2 \n", argv[0]);
??????????????? exit(0);

??????? }

??????? num1 = atoi(argv[1]);
??????? num2 = atoi(argv[2]);

??????? result = add(server, num1, num2, &sum);
??????? if (result != 0)
??????? {
??????????????? printf("soap err, errcode = %d \n", result);
??????? }
??????? else
??????? {
??????????????? printf("%d + %d = %d \n", num1, num2, sum);
??????? }

??????? return 0;
}

(5)編譯和運(yùn)行:

前面都已經(jīng)準(zhǔn)備好了,現(xiàn)在只需要:

make???????????????????????????????????? ---得到服務(wù)端程序SmsWBSserver

make client??????????????????????????? ---得到客戶端程序SmsWBStest

SmsWBSserver 9000???????????? ----運(yùn)行服務(wù)端程序

出來類似下面的顯示就表示運(yùn)行正常

Socket connection successful: master socket = 3

再運(yùn)行客戶端程序:

SmsWBStest 67 78

顯示:

67 + 78 = 145

調(diào)用Web Service成功

轉(zhuǎn)載于:https://blog.51cto.com/5491911/932507

總結(jié)

以上是生活随笔為你收集整理的Linux下用gSOAP开发Web Service服务端和客户端程序(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。