首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
其他好文
> 详细
gsoap编译及使用例子
时间:
2015-01-22 18:15:36
阅读:
253
评论:
0
收藏:
0
[点我收藏+]
标签:
http://sourceforge.net/projects/gsoap2/
下载gsoap源码
解压:
$ unzip gsoap_2.8.17.zip
编译:
$ cd gsoap-2.8/
$ configure
$ make
$ sudo make install
add.h文件
/
/
gsoap ns service name
:
add
/
/
gsoap ns service style
:
rpc
/
/
gsoap ns service encoding
:
encoded
/
/
gsoap ns service namespace
:
http
:
/
/
localhost
/
add
.
wsdl
/
/
gsoap ns service
location
:
http
:
/
/
localhost
/
add
.
cgi
/
/
gsoap ns schema namespace
:
urn
:
add
typedef std
:
:
string
xsd__string
;
struct abc
{
int
a
;
double b
;
char
*
c
;
}
;
int
ns4__add
(
int
num1
,
int
num2
,
int
*
sum
)
;
int
ns4__str
(
xsd__string src
,
xsd__string
*
result
)
;
int
ns4__abcstruct
(
struct abc
*
result
)
;
int
ns4__Add100
(
int
InValue
,
int
&
result
)
;
addClient.cpp文件
#include
<
stdio
.
h
>
#include
<
stdlib
.
h
>
#include
<
string
.
h
>
#include
<
string
>
#include
"soapStub.h"
#include
"ns4.nsmap"
#include
"soapProxy.h"
using namespace std
;
int
main
(
int
argc
,
char
*
*
argv
)
{
int
result
=
-
1
;
char server
[
128
]
=
{
0
}
;
if
(
argc
<
2
)
{
printf
(
"usage: %s <ip:port>\n"
,
argv
[
0
]
)
;
exit
(
1
)
;
}
strcpy
(
server
,
argv
[
1
]
)
;
Proxy add
;
add
.
soap_endpoint
=
server
;
int
sum
=
0
;
result
=
add
.
Add100
(
10
,
sum
)
;
printf
(
"Add100(10)=%d\n"
,
sum
)
;
result
=
add
.
add
(
3
,
4
,
&
sum
)
;
if
(
result
!
=
0
)
{
printf
(
"soap error, errcode=%d\n"
,
result
)
;
}
else
{
printf
(
"%d + %d = %d\n"
,
3
,
4
,
sum
)
;
}
string
str
;
result
=
add
.
str
(
string
(
"world"
)
,
&
str
)
;
if
(
result
!
=
0
)
{
printf
(
"soap error, errcode=%d\n"
,
result
)
;
}
else
{
cout
<
<
str
<
<
endl
;
}
struct abc st
;
result
=
add
.
abcstruct
(
&
st
)
;
printf
(
"abcstruct:%d %lf %s\n"
,
st
.
a
,
st
.
b
,
st
.
c
)
;
return 0
;
}
addServer.cpp文件
#include
<
string
>
#include
"soapH.h"
#include
"soapService.h"
#include
"ns4.nsmap"
using namespace std
;
int
Service
:
:
add
(
int
num1
,
int
num2
,
int
*
sum
)
{
*
sum
=
num1
+
num2
;
return SOAP_OK
;
}
int
Service
:
:
str
(
string
src
,
string
*
result
)
{
*
result
=
string
(
"hello "
)
+
src
;
cout
<
<
*
result
<
<
endl
;
return 0
;
}
int
Service
:
:
abcstruct
(
struct abc
*
result
)
{
result
-
>
a
=
1
;
result
-
>
b
=
2
.
0
;
result
-
>
c
=
new char
[
2
]
;
result
-
>
c
[
0
]
=
‘
a
‘
;
result
-
>
c
[
1
]
=
‘
\
0
‘
;
return 0
;
}
int
Service
:
:
Add100
(
int
num
,
int
&
result
)
{
result
=
num
+
100
;
return 0
;
}
int
main
(
int
argc
,
char
*
*
argv
)
{
int
m
,
s
;
Service add
;
if
(
argc
<
2
)
{
printf
(
"usage: %s <server_port> /n"
,
argv
[
0
]
)
;
return
-
1
;
}
if
(
add
.
run
(
atoi
(
argv
[
1
]
)
)
)
{
printf
(
"add service run failed\n"
)
;
return
-
1
;
}
return 0
;
}
Makefile文件
#GSOAP_ROOT
=
/
root
/
gsoap
-
2
.
7
/
gsoap
WSNAME
=
add
CC
=
g
+
+
-
g
-
DWITH_NONAMESPACES
#INCLUDE
=
-
I$
(
GSOAP_ROOT
)
SERVER_OBJS
=
soapC
.
o soapService
.
o $
(
WSNAME
)
Server
.
o
CLIENT_OBJS
=
soapC
.
o soapProxy
.
o $
(
WSNAME
)
Client
.
o
all
:
server client
server
:
$
(
SERVER_OBJS
)
$
(
CC
)
$
(
INCLUDE
)
-
o $
(
WSNAME
)
Server $
(
SERVER_OBJS
)
-
lgsoapssl
+
+
-
lssl
-
lcrypto
-
lz
client
:
$
(
CLIENT_OBJS
)
$
(
CC
)
$
(
INCLUDE
)
-
o $
(
WSNAME
)
Client $
(
CLIENT_OBJS
)
-
lgsoapssl
+
+
-
lssl
-
lcrypto
-
lz
clean
:
rm
-
f
*
.
o
*
.
xml
*
.
a
*
.
wsdl
*
.
nsmap soapH
.
h $
(
WSNAME
)
Stub
.
*
$
(
WSNAME
)
server ns
.
xsd
编译:
soapcpp2 -i add.h
make
运行:
服务器
./addServer 9981
客户端
./addClient http://localhost:9981
以下是打印
Add100(10)=110
3 + 4 = 7
hello world
abcstruct:1 2.000000 a
其他一些总结:
如果自己写example程序,发现编译不过:
soapProxy.o:在函数‘Proxy::~Proxy()’中:
soapProxy.cpp:(.text+0x52):对‘soap::~soap()’未定义的引用
soapProxy.o:在函数‘Proxy::reset()’中:
soapProxy.cpp:(.text+0xec):对‘soap_initialize’未定义的引用
soapProxy.o:在函数‘Proxy::testChinese(char const*, char const*, char**)’中:
soapProxy.cpp:(.text+0x27a):对‘soap_url’未定义的引用
soapProxy.o:在函数‘Proxy::Proxy()’中:
soapProxy.cpp:(.text+0x40d):对‘soap::soap()’未定义的引用
soapProxy.cpp:(.text+0x44b):对‘soap::~soap()’未定义的引用
soapProxy.o:在函数‘Proxy::reset()’中:
soapProxy.cpp:(.text+0xec):对‘soap_initialize’未定义的引用
soapProxy.o:在函数‘Proxy::testChinese(char const*, char const*, char**)’中:
soapProxy.cpp:(.text+0x27a):对‘soap_url’未定义的引用
collect2: error: ld returned 1 exit status
解决方法:
Makefile不用-lgsoap或者-lgsoapssl++方式链接gsop
而是直接把std2Soap.cpp 加入到工程中一起与自己的程序编译
gsoap下的samples示例工程
oneway 与心跳包有关
httpcookies cookies有关
要支持SSl,GZIP,编译命令中加 -DWITH_OPENSSL -DWITH_GZIP -lssl -lcrypto -lz
中文乱码解决:
struct soap soap;
soap_init(&soap);
soap_set_mode(&soap, SOAP_C_UTFSTRING); // 程序中加这个
设置连接超时(秒为单位):
soap->connect_timeout=3;
设置收发超时:
soap->send_timeout = 30;
soap->recv_timeout = 30;
作者:帅得不出门 程序员群:31843264
gsoap编译及使用例子
标签:
原文地址:http://blog.csdn.net/zmlovelx/article/details/43021323
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
分布式事务
2021-07-29
OpenStack云平台命令行登录账户
2021-07-29
getLastRowNum()与getLastCellNum()/getPhysicalNumberOfRows()与getPhysicalNumberOfCells()
2021-07-29
【K8s概念】CSI 卷克隆
2021-07-29
vue3.0使用ant-design-vue进行按需加载原来这么简单
2021-07-29
stack栈
2021-07-29
抽奖动画 - 大转盘抽奖
2021-07-29
PPT写作技巧
2021-07-29
003-核心技术-IO模型-NIO-基于NIO群聊示例
2021-07-29
Bootstrap组件2
2021-07-29
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!